Skip to content

Commit abf359d

Browse files
committed
Generate marshal JSON without gogo proto jsonpb
Signed-off-by: Bogdan Drutu <[email protected]>
1 parent 811b19c commit abf359d

File tree

160 files changed

+3067
-372
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

160 files changed

+3067
-372
lines changed

internal/cmd/pdatagen/internal/base_fields.go

Lines changed: 81 additions & 302 deletions
Large diffs are not rendered by default.
Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
package internal
2+
3+
import (
4+
"strings"
5+
"text/template"
6+
)
7+
8+
const optionalPrimitiveAccessorsTemplate = `// {{ .fieldName }} returns the {{ .lowerFieldName }} associated with this {{ .structName }}.
9+
func (ms {{ .structName }}) {{ .fieldName }}() {{ .returnType }} {
10+
return ms.orig.Get{{ .fieldName }}()
11+
}
12+
13+
// Has{{ .fieldName }} returns true if the {{ .structName }} contains a
14+
// {{ .fieldName }} value, false otherwise.
15+
func (ms {{ .structName }}) Has{{ .fieldName }}() bool {
16+
return ms.orig.{{ .fieldName }}_ != nil
17+
}
18+
19+
// Set{{ .fieldName }} replaces the {{ .lowerFieldName }} associated with this {{ .structName }}.
20+
func (ms {{ .structName }}) Set{{ .fieldName }}(v {{ .returnType }}) {
21+
ms.state.AssertMutable()
22+
ms.orig.{{ .fieldName }}_ = &{{ .originStructType }}{{ "{" }}{{ .fieldName }}: v}
23+
}
24+
25+
// Remove{{ .fieldName }} removes the {{ .lowerFieldName }} associated with this {{ .structName }}.
26+
func (ms {{ .structName }}) Remove{{ .fieldName }}() {
27+
ms.state.AssertMutable()
28+
ms.orig.{{ .fieldName }}_ = nil
29+
}`
30+
31+
const optionalPrimitiveAccessorsTestTemplate = `func Test{{ .structName }}_{{ .fieldName }}(t *testing.T) {
32+
ms := New{{ .structName }}()
33+
{{- if eq .returnType "float64" }}
34+
assert.InDelta(t, {{ .defaultVal }}, ms.{{ .fieldName }}() , 0.01)
35+
{{- else }}
36+
assert.Equal(t, {{ .defaultVal }}, ms.{{ .fieldName }}())
37+
{{- end }}
38+
ms.Set{{ .fieldName }}({{ .testValue }})
39+
assert.True(t, ms.Has{{ .fieldName }}())
40+
{{- if eq .returnType "float64" }}
41+
assert.InDelta(t, {{.testValue }}, ms.{{ .fieldName }}(), 0.01)
42+
{{- else }}
43+
assert.Equal(t, {{ .testValue }}, ms.{{ .fieldName }}())
44+
{{- end }}
45+
ms.Remove{{ .fieldName }}()
46+
assert.False(t, ms.Has{{ .fieldName }}())
47+
dest := New{{ .structName }}()
48+
dest.Set{{ .fieldName }}({{ .testValue }})
49+
ms.CopyTo(dest)
50+
assert.False(t, dest.Has{{ .fieldName }}())
51+
}`
52+
53+
const optionalPrimitiveSetTestTemplate = `tv.orig.{{ .fieldName }}_ = &{{ .originStructType }}{
54+
{{- .fieldName }}: {{ .testValue }}}`
55+
56+
const optionalPrimitiveCopyOrigTemplate = `if src{{ .fieldName }}, ok := src.{{ .fieldName }}_.(*{{ .originStructType }}); ok {
57+
dest{{ .fieldName }}, ok := dest.{{ .fieldName }}_.(*{{ .originStructType }})
58+
if !ok {
59+
dest{{ .fieldName }} = &{{ .originStructType }}{}
60+
dest.{{ .fieldName }}_ = dest{{ .fieldName }}
61+
}
62+
dest{{ .fieldName }}.{{ .fieldName }} = src{{ .fieldName }}.{{ .fieldName }}
63+
} else {
64+
dest.{{ .fieldName }}_ = nil
65+
}`
66+
67+
const optionalPrimitiveMarshalJSONTemplate = `// Marshal orig.{{ .fieldName }} as JSON.
68+
if ms.Has{{ .fieldName }}() {
69+
dest.WriteObjectField("{{ lowerFirst .fieldName }}")
70+
dest.Write{{ upperFirst .returnType }}(ms.{{ .fieldName }}())
71+
}`
72+
73+
type optionalPrimitiveField struct {
74+
fieldName string
75+
defaultVal string
76+
testVal string
77+
returnType string
78+
}
79+
80+
func (opv *optionalPrimitiveField) GenerateAccessors(ms *messageStruct) string {
81+
t := template.Must(templateNew("optionalPrimitiveAccessorsTemplate").Parse(optionalPrimitiveAccessorsTemplate))
82+
return executeTemplate(t, opv.templateFields(ms))
83+
}
84+
85+
func (opv *optionalPrimitiveField) GenerateAccessorsTest(ms *messageStruct) string {
86+
t := template.Must(templateNew("optionalPrimitiveAccessorsTestTemplate").Parse(optionalPrimitiveAccessorsTestTemplate))
87+
return executeTemplate(t, opv.templateFields(ms))
88+
}
89+
90+
func (opv *optionalPrimitiveField) GenerateSetWithTestValue(ms *messageStruct) string {
91+
t := template.Must(templateNew("optionalPrimitiveSetTestTemplate").Parse(optionalPrimitiveSetTestTemplate))
92+
return executeTemplate(t, opv.templateFields(ms))
93+
}
94+
95+
func (opv *optionalPrimitiveField) GenerateCopyOrig(ms *messageStruct) string {
96+
t := template.Must(templateNew("optionalPrimitiveCopyOrigTemplate").Parse(optionalPrimitiveCopyOrigTemplate))
97+
return executeTemplate(t, opv.templateFields(ms))
98+
}
99+
100+
func (opv *optionalPrimitiveField) GenerateMarshalJSON(ms *messageStruct) string {
101+
t := template.Must(templateNew("optionalPrimitiveMarshalJSONTemplate").Parse(optionalPrimitiveMarshalJSONTemplate))
102+
return executeTemplate(t, opv.templateFields(ms))
103+
}
104+
105+
func (opv *optionalPrimitiveField) templateFields(ms *messageStruct) map[string]any {
106+
return map[string]any{
107+
"structName": ms.getName(),
108+
"packageName": "",
109+
"defaultVal": opv.defaultVal,
110+
"fieldName": opv.fieldName,
111+
"lowerFieldName": strings.ToLower(opv.fieldName),
112+
"testValue": opv.testVal,
113+
"returnType": opv.returnType,
114+
"originStructName": ms.originFullName,
115+
"originStructType": ms.originFullName + "_" + opv.fieldName,
116+
}
117+
}
118+
119+
var _ baseField = (*optionalPrimitiveField)(nil)

internal/cmd/pdatagen/internal/pcommon_package.go

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ var pcommon = &Package{
99
path: "pcommon",
1010
imports: []string{
1111
`"go.opentelemetry.io/collector/pdata/internal"`,
12+
`"go.opentelemetry.io/collector/pdata/internal/json"`,
1213
`otlpcommon "go.opentelemetry.io/collector/pdata/internal/data/protogen/common/v1"`,
1314
`otlpresource "go.opentelemetry.io/collector/pdata/internal/data/protogen/resource/v1"`,
1415
},
@@ -18,6 +19,7 @@ var pcommon = &Package{
1819
`"github.com/stretchr/testify/assert"`,
1920
``,
2021
`"go.opentelemetry.io/collector/pdata/internal"`,
22+
`"go.opentelemetry.io/collector/pdata/internal/json"`,
2123
},
2224
},
2325
structs: []baseStruct{
@@ -75,19 +77,19 @@ var timestampType = &primitiveType{
7577
testVal: "1234567890",
7678
}
7779

78-
var startTimeField = &primitiveTypedField{
80+
var startTimeField = &typedField{
7981
fieldName: "StartTimestamp",
8082
originFieldName: "StartTimeUnixNano",
8183
returnType: timestampType,
8284
}
8385

84-
var timeField = &primitiveTypedField{
86+
var timeField = &typedField{
8587
fieldName: "Timestamp",
8688
originFieldName: "TimeUnixNano",
8789
returnType: timestampType,
8890
}
8991

90-
var endTimeField = &primitiveTypedField{
92+
var endTimeField = &typedField{
9193
fieldName: "EndTimestamp",
9294
originFieldName: "EndTimeUnixNano",
9395
returnType: timestampType,
@@ -111,27 +113,26 @@ var anyValue = &messageStruct{
111113
originFullName: "otlpcommon.AnyValue",
112114
}
113115

114-
var traceIDField = &primitiveTypedField{
116+
var traceIDField = &typedField{
115117
fieldName: "TraceID",
116118
originFieldName: "TraceId",
117-
returnType: traceIDType,
118-
}
119-
120-
var traceIDType = &primitiveType{
121-
structName: "TraceID",
122-
packageName: "pcommon",
123-
rawType: "data.TraceID",
124-
defaultVal: "data.TraceID([16]byte{})",
125-
testVal: "data.TraceID([16]byte{1, 2, 3, 4, 5, 6, 7, 8, 8, 7, 6, 5, 4, 3, 2, 1})",
119+
returnType: &primitiveType{
120+
structName: "TraceID",
121+
packageName: "pcommon",
122+
rawType: "data.TraceID",
123+
isType: true,
124+
defaultVal: "data.TraceID([16]byte{})",
125+
testVal: "data.TraceID([16]byte{1, 2, 3, 4, 5, 6, 7, 8, 8, 7, 6, 5, 4, 3, 2, 1})",
126+
},
126127
}
127128

128-
var spanIDField = &primitiveTypedField{
129+
var spanIDField = &typedField{
129130
fieldName: "SpanID",
130131
originFieldName: "SpanId",
131132
returnType: spanIDType,
132133
}
133134

134-
var parentSpanIDField = &primitiveTypedField{
135+
var parentSpanIDField = &typedField{
135136
fieldName: "ParentSpanID",
136137
originFieldName: "ParentSpanId",
137138
returnType: spanIDType,
@@ -141,6 +142,7 @@ var spanIDType = &primitiveType{
141142
structName: "SpanID",
142143
packageName: "pcommon",
143144
rawType: "data.SpanID",
145+
isType: true,
144146
defaultVal: "data.SpanID([8]byte{})",
145147
testVal: "data.SpanID([8]byte{8, 7, 6, 5, 4, 3, 2, 1})",
146148
}

internal/cmd/pdatagen/internal/plog_package.go

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ var plog = &Package{
1212
``,
1313
`"go.opentelemetry.io/collector/pdata/internal"`,
1414
`"go.opentelemetry.io/collector/pdata/internal/data"`,
15+
`"go.opentelemetry.io/collector/pdata/internal/json"`,
1516
`otlplogs "go.opentelemetry.io/collector/pdata/internal/data/protogen/logs/v1"`,
1617
`"go.opentelemetry.io/collector/pdata/pcommon"`,
1718
},
@@ -23,6 +24,7 @@ var plog = &Package{
2324
``,
2425
`"go.opentelemetry.io/collector/pdata/internal"`,
2526
`"go.opentelemetry.io/collector/pdata/internal/data"`,
27+
`"go.opentelemetry.io/collector/pdata/internal/json"`,
2628
`otlplogs "go.opentelemetry.io/collector/pdata/internal/data/protogen/logs/v1"`,
2729
`"go.opentelemetry.io/collector/pdata/pcommon"`,
2830
},
@@ -85,19 +87,19 @@ var logRecord = &messageStruct{
8587
description: "// LogRecord are experimental implementation of OpenTelemetry Log Data Model.\n",
8688
originFullName: "otlplogs.LogRecord",
8789
fields: []baseField{
88-
&primitiveTypedField{
90+
&typedField{
8991
fieldName: "ObservedTimestamp",
9092
originFieldName: "ObservedTimeUnixNano",
9193
returnType: timestampType,
9294
},
93-
&primitiveTypedField{
95+
&typedField{
9496
fieldName: "Timestamp",
9597
originFieldName: "TimeUnixNano",
9698
returnType: timestampType,
9799
},
98100
traceIDField,
99101
spanIDField,
100-
&primitiveTypedField{
102+
&typedField{
101103
fieldName: "Flags",
102104
returnType: &primitiveType{
103105
structName: "LogRecordFlags",
@@ -118,11 +120,12 @@ var logRecord = &messageStruct{
118120
defaultVal: `""`,
119121
testVal: `"INFO"`,
120122
},
121-
&primitiveTypedField{
123+
&typedField{
122124
fieldName: "SeverityNumber",
123125
returnType: &primitiveType{
124126
structName: "SeverityNumber",
125127
rawType: "otlplogs.SeverityNumber",
128+
isType: true,
126129
defaultVal: `otlplogs.SeverityNumber(0)`,
127130
testVal: `otlplogs.SeverityNumber(5)`,
128131
},

internal/cmd/pdatagen/internal/pmetric_package.go

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ var pmetric = &Package{
1212
``,
1313
`"go.opentelemetry.io/collector/pdata/internal"`,
1414
`"go.opentelemetry.io/collector/pdata/internal/data"`,
15+
`"go.opentelemetry.io/collector/pdata/internal/json"`,
1516
`otlpmetrics "go.opentelemetry.io/collector/pdata/internal/data/protogen/metrics/v1"`,
1617
`"go.opentelemetry.io/collector/pdata/pcommon"`,
1718
},
@@ -23,6 +24,7 @@ var pmetric = &Package{
2324
``,
2425
`"go.opentelemetry.io/collector/pdata/internal"`,
2526
`"go.opentelemetry.io/collector/pdata/internal/data"`,
27+
`"go.opentelemetry.io/collector/pdata/internal/json"`,
2628
`otlpmetrics "go.opentelemetry.io/collector/pdata/internal/data/protogen/metrics/v1"`,
2729
`"go.opentelemetry.io/collector/pdata/pcommon"`,
2830
},
@@ -433,7 +435,7 @@ var exemplar = &messageStruct{
433435
},
434436
}
435437

436-
var dataPointFlagsField = &primitiveTypedField{
438+
var dataPointFlagsField = &typedField{
437439
fieldName: "Flags",
438440
returnType: &primitiveType{
439441
structName: "DataPointFlags",
@@ -501,31 +503,32 @@ var isMonotonicField = &primitiveField{
501503
testVal: "true",
502504
}
503505

504-
var aggregationTemporalityField = &primitiveTypedField{
506+
var aggregationTemporalityField = &typedField{
505507
fieldName: "AggregationTemporality",
506508
returnType: &primitiveType{
507509
structName: "AggregationTemporality",
508510
rawType: "otlpmetrics.AggregationTemporality",
511+
isType: true,
509512
defaultVal: "otlpmetrics.AggregationTemporality(0)",
510513
testVal: "otlpmetrics.AggregationTemporality(1)",
511514
},
512515
}
513516

514-
var sumField = &optionalPrimitiveValue{
517+
var sumField = &optionalPrimitiveField{
515518
fieldName: "Sum",
516519
returnType: "float64",
517520
defaultVal: "float64(0.0)",
518521
testVal: "float64(17.13)",
519522
}
520523

521-
var minField = &optionalPrimitiveValue{
524+
var minField = &optionalPrimitiveField{
522525
fieldName: "Min",
523526
returnType: "float64",
524527
defaultVal: "float64(0.0)",
525528
testVal: "float64(9.23)",
526529
}
527530

528-
var maxField = &optionalPrimitiveValue{
531+
var maxField = &optionalPrimitiveField{
529532
fieldName: "Max",
530533
returnType: "float64",
531534
defaultVal: "float64(0.0)",

0 commit comments

Comments
 (0)