Skip to content

Commit ec23eb0

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

File tree

153 files changed

+2643
-281
lines changed

Some content is hidden

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

153 files changed

+2643
-281
lines changed

internal/cmd/pdatagen/internal/base_fields.go

Lines changed: 107 additions & 213 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: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,16 @@ var pcommon = &Package{
88
name: "pcommon",
99
path: "pcommon",
1010
imports: []string{
11+
`jsoniter "github.com/json-iterator/go"`,
12+
``,
1113
`"go.opentelemetry.io/collector/pdata/internal"`,
1214
`otlpcommon "go.opentelemetry.io/collector/pdata/internal/data/protogen/common/v1"`,
1315
`otlpresource "go.opentelemetry.io/collector/pdata/internal/data/protogen/resource/v1"`,
1416
},
1517
testImports: []string{
1618
`"testing"`,
1719
``,
20+
`jsoniter "github.com/json-iterator/go"`,
1821
`"github.com/stretchr/testify/assert"`,
1922
``,
2023
`"go.opentelemetry.io/collector/pdata/internal"`,
@@ -75,19 +78,19 @@ var timestampType = &primitiveType{
7578
testVal: "1234567890",
7679
}
7780

78-
var startTimeField = &primitiveTypedField{
81+
var startTimeField = &typedField{
7982
fieldName: "StartTimestamp",
8083
originFieldName: "StartTimeUnixNano",
8184
returnType: timestampType,
8285
}
8386

84-
var timeField = &primitiveTypedField{
87+
var timeField = &typedField{
8588
fieldName: "Timestamp",
8689
originFieldName: "TimeUnixNano",
8790
returnType: timestampType,
8891
}
8992

90-
var endTimeField = &primitiveTypedField{
93+
var endTimeField = &typedField{
9194
fieldName: "EndTimestamp",
9295
originFieldName: "EndTimeUnixNano",
9396
returnType: timestampType,
@@ -111,27 +114,26 @@ var anyValue = &messageStruct{
111114
originFullName: "otlpcommon.AnyValue",
112115
}
113116

114-
var traceIDField = &primitiveTypedField{
117+
var traceIDField = &typedField{
115118
fieldName: "TraceID",
116119
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})",
120+
returnType: &primitiveType{
121+
structName: "TraceID",
122+
packageName: "pcommon",
123+
rawType: "data.TraceID",
124+
isType: true,
125+
defaultVal: "data.TraceID([16]byte{})",
126+
testVal: "data.TraceID([16]byte{1, 2, 3, 4, 5, 6, 7, 8, 8, 7, 6, 5, 4, 3, 2, 1})",
127+
},
126128
}
127129

128-
var spanIDField = &primitiveTypedField{
130+
var spanIDField = &typedField{
129131
fieldName: "SpanID",
130132
originFieldName: "SpanId",
131133
returnType: spanIDType,
132134
}
133135

134-
var parentSpanIDField = &primitiveTypedField{
136+
var parentSpanIDField = &typedField{
135137
fieldName: "ParentSpanID",
136138
originFieldName: "ParentSpanId",
137139
returnType: spanIDType,
@@ -141,6 +143,7 @@ var spanIDType = &primitiveType{
141143
structName: "SpanID",
142144
packageName: "pcommon",
143145
rawType: "data.SpanID",
146+
isType: true,
144147
defaultVal: "data.SpanID([8]byte{})",
145148
testVal: "data.SpanID([8]byte{8, 7, 6, 5, 4, 3, 2, 1})",
146149
}

internal/cmd/pdatagen/internal/plog_package.go

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ var plog = &Package{
1010
imports: []string{
1111
`"sort"`,
1212
``,
13+
`jsoniter "github.com/json-iterator/go"`,
14+
``,
1315
`"go.opentelemetry.io/collector/pdata/internal"`,
1416
`"go.opentelemetry.io/collector/pdata/internal/data"`,
1517
`otlplogs "go.opentelemetry.io/collector/pdata/internal/data/protogen/logs/v1"`,
@@ -19,6 +21,7 @@ var plog = &Package{
1921
`"testing"`,
2022
`"unsafe"`,
2123
``,
24+
`jsoniter "github.com/json-iterator/go"`,
2225
`"github.com/stretchr/testify/assert"`,
2326
``,
2427
`"go.opentelemetry.io/collector/pdata/internal"`,
@@ -85,19 +88,19 @@ var logRecord = &messageStruct{
8588
description: "// LogRecord are experimental implementation of OpenTelemetry Log Data Model.\n",
8689
originFullName: "otlplogs.LogRecord",
8790
fields: []baseField{
88-
&primitiveTypedField{
91+
&typedField{
8992
fieldName: "ObservedTimestamp",
9093
originFieldName: "ObservedTimeUnixNano",
9194
returnType: timestampType,
9295
},
93-
&primitiveTypedField{
96+
&typedField{
9497
fieldName: "Timestamp",
9598
originFieldName: "TimeUnixNano",
9699
returnType: timestampType,
97100
},
98101
traceIDField,
99102
spanIDField,
100-
&primitiveTypedField{
103+
&typedField{
101104
fieldName: "Flags",
102105
returnType: &primitiveType{
103106
structName: "LogRecordFlags",
@@ -118,11 +121,12 @@ var logRecord = &messageStruct{
118121
defaultVal: `""`,
119122
testVal: `"INFO"`,
120123
},
121-
&primitiveTypedField{
124+
&typedField{
122125
fieldName: "SeverityNumber",
123126
returnType: &primitiveType{
124127
structName: "SeverityNumber",
125128
rawType: "otlplogs.SeverityNumber",
129+
isType: true,
126130
defaultVal: `otlplogs.SeverityNumber(0)`,
127131
testVal: `otlplogs.SeverityNumber(5)`,
128132
},

internal/cmd/pdatagen/internal/pmetric_package.go

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ var pmetric = &Package{
1010
imports: []string{
1111
`"sort"`,
1212
``,
13+
`jsoniter "github.com/json-iterator/go"`,
14+
``,
1315
`"go.opentelemetry.io/collector/pdata/internal"`,
1416
`"go.opentelemetry.io/collector/pdata/internal/data"`,
1517
`otlpmetrics "go.opentelemetry.io/collector/pdata/internal/data/protogen/metrics/v1"`,
@@ -19,6 +21,7 @@ var pmetric = &Package{
1921
`"testing"`,
2022
`"unsafe"`,
2123
``,
24+
`jsoniter "github.com/json-iterator/go"`,
2225
`"github.com/stretchr/testify/assert"`,
2326
``,
2427
`"go.opentelemetry.io/collector/pdata/internal"`,
@@ -433,7 +436,7 @@ var exemplar = &messageStruct{
433436
},
434437
}
435438

436-
var dataPointFlagsField = &primitiveTypedField{
439+
var dataPointFlagsField = &typedField{
437440
fieldName: "Flags",
438441
returnType: &primitiveType{
439442
structName: "DataPointFlags",
@@ -501,31 +504,32 @@ var isMonotonicField = &primitiveField{
501504
testVal: "true",
502505
}
503506

504-
var aggregationTemporalityField = &primitiveTypedField{
507+
var aggregationTemporalityField = &typedField{
505508
fieldName: "AggregationTemporality",
506509
returnType: &primitiveType{
507510
structName: "AggregationTemporality",
508511
rawType: "otlpmetrics.AggregationTemporality",
512+
isType: true,
509513
defaultVal: "otlpmetrics.AggregationTemporality(0)",
510514
testVal: "otlpmetrics.AggregationTemporality(1)",
511515
},
512516
}
513517

514-
var sumField = &optionalPrimitiveValue{
518+
var sumField = &optionalPrimitiveField{
515519
fieldName: "Sum",
516520
returnType: "float64",
517521
defaultVal: "float64(0.0)",
518522
testVal: "float64(17.13)",
519523
}
520524

521-
var minField = &optionalPrimitiveValue{
525+
var minField = &optionalPrimitiveField{
522526
fieldName: "Min",
523527
returnType: "float64",
524528
defaultVal: "float64(0.0)",
525529
testVal: "float64(9.23)",
526530
}
527531

528-
var maxField = &optionalPrimitiveValue{
532+
var maxField = &optionalPrimitiveField{
529533
fieldName: "Max",
530534
returnType: "float64",
531535
defaultVal: "float64(0.0)",

0 commit comments

Comments
 (0)