Skip to content

Commit 0392d9d

Browse files
committed
Share __OmitZero types as private structs
1 parent 867e805 commit 0392d9d

File tree

6 files changed

+140
-165
lines changed

6 files changed

+140
-165
lines changed

pkg/validation/spec/header.go

Lines changed: 4 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -66,37 +66,14 @@ func (h Header) MarshalJSON() ([]byte, error) {
6666
}
6767

6868
func (h Header) MarshalNextJSON(opts jsonv2.MarshalOptions, enc *jsonv2.Encoder) error {
69-
type SimpleSchemaOmitZero struct {
70-
Type string `json:"type,omitempty"`
71-
Nullable bool `json:"nullable,omitzero"`
72-
Format string `json:"format,omitempty"`
73-
Items *Items `json:"items,omitzero"`
74-
CollectionFormat string `json:"collectionFormat,omitempty"`
75-
Default interface{} `json:"default,omitempty"`
76-
Example interface{} `json:"example,omitempty"`
77-
}
78-
type CommonValidationsOmitZero struct {
79-
Maximum *float64 `json:"maximum,omitempty"`
80-
ExclusiveMaximum bool `json:"exclusiveMaximum,omitzero"`
81-
Minimum *float64 `json:"minimum,omitempty"`
82-
ExclusiveMinimum bool `json:"exclusiveMinimum,omitzero"`
83-
MaxLength *int64 `json:"maxLength,omitempty"`
84-
MinLength *int64 `json:"minLength,omitempty"`
85-
Pattern string `json:"pattern,omitempty"`
86-
MaxItems *int64 `json:"maxItems,omitempty"`
87-
MinItems *int64 `json:"minItems,omitempty"`
88-
UniqueItems bool `json:"uniqueItems,omitzero"`
89-
MultipleOf *float64 `json:"multipleOf,omitempty"`
90-
Enum []interface{} `json:"enum,omitempty"`
91-
}
9269
var x struct {
93-
CommonValidationsOmitZero
94-
SimpleSchemaOmitZero
70+
CommonValidations commonValidationsOmitZero `json:",inline"`
71+
SimpleSchema simpleSchemaOmitZero `json:",inline"`
9572
Extensions
9673
HeaderProps
9774
}
98-
x.CommonValidationsOmitZero = CommonValidationsOmitZero(h.CommonValidations)
99-
x.SimpleSchemaOmitZero = SimpleSchemaOmitZero(h.SimpleSchema)
75+
x.CommonValidations = commonValidationsOmitZero(h.CommonValidations)
76+
x.SimpleSchema = simpleSchemaOmitZero(h.SimpleSchema)
10077
x.Extensions = h.Extensions
10178
x.HeaderProps = h.HeaderProps
10279
return opts.MarshalNext(enc, x)

pkg/validation/spec/items.go

Lines changed: 34 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,18 @@ type SimpleSchema struct {
3737
Example interface{} `json:"example,omitempty"`
3838
}
3939

40+
// Marshaling structure only, always edit along with corresponding
41+
// struct (or compilation will fail).
42+
type simpleSchemaOmitZero struct {
43+
Type string `json:"type,omitempty"`
44+
Nullable bool `json:"nullable,omitzero"`
45+
Format string `json:"format,omitempty"`
46+
Items *Items `json:"items,omitzero"`
47+
CollectionFormat string `json:"collectionFormat,omitempty"`
48+
Default interface{} `json:"default,omitempty"`
49+
Example interface{} `json:"example,omitempty"`
50+
}
51+
4052
// CommonValidations describe common JSON-schema validations
4153
type CommonValidations struct {
4254
Maximum *float64 `json:"maximum,omitempty"`
@@ -53,6 +65,23 @@ type CommonValidations struct {
5365
Enum []interface{} `json:"enum,omitempty"`
5466
}
5567

68+
// Marshaling structure only, always edit along with corresponding
69+
// struct (or compilation will fail).
70+
type commonValidationsOmitZero struct {
71+
Maximum *float64 `json:"maximum,omitempty"`
72+
ExclusiveMaximum bool `json:"exclusiveMaximum,omitzero"`
73+
Minimum *float64 `json:"minimum,omitempty"`
74+
ExclusiveMinimum bool `json:"exclusiveMinimum,omitzero"`
75+
MaxLength *int64 `json:"maxLength,omitempty"`
76+
MinLength *int64 `json:"minLength,omitempty"`
77+
Pattern string `json:"pattern,omitempty"`
78+
MaxItems *int64 `json:"maxItems,omitempty"`
79+
MinItems *int64 `json:"minItems,omitempty"`
80+
UniqueItems bool `json:"uniqueItems,omitzero"`
81+
MultipleOf *float64 `json:"multipleOf,omitempty"`
82+
Enum []interface{} `json:"enum,omitempty"`
83+
}
84+
5685
// Items a limited subset of JSON-Schema's items object.
5786
// It is used by parameter definitions that are not located in "body".
5887
//
@@ -140,37 +169,14 @@ func (i Items) MarshalJSON() ([]byte, error) {
140169
}
141170

142171
func (i Items) MarshalNextJSON(opts jsonv2.MarshalOptions, enc *jsonv2.Encoder) error {
143-
type SimpleSchemaOmitZero struct {
144-
Type string `json:"type,omitempty"`
145-
Nullable bool `json:"nullable,omitzero"`
146-
Format string `json:"format,omitempty"`
147-
Items *Items `json:"items,omitzero"`
148-
CollectionFormat string `json:"collectionFormat,omitempty"`
149-
Default interface{} `json:"default,omitempty"`
150-
Example interface{} `json:"example,omitempty"`
151-
}
152-
type CommonValidationsOmitZero struct {
153-
Maximum *float64 `json:"maximum,omitempty"`
154-
ExclusiveMaximum bool `json:"exclusiveMaximum,omitzero"`
155-
Minimum *float64 `json:"minimum,omitempty"`
156-
ExclusiveMinimum bool `json:"exclusiveMinimum,omitzero"`
157-
MaxLength *int64 `json:"maxLength,omitempty"`
158-
MinLength *int64 `json:"minLength,omitempty"`
159-
Pattern string `json:"pattern,omitempty"`
160-
MaxItems *int64 `json:"maxItems,omitempty"`
161-
MinItems *int64 `json:"minItems,omitempty"`
162-
UniqueItems bool `json:"uniqueItems,omitzero"`
163-
MultipleOf *float64 `json:"multipleOf,omitempty"`
164-
Enum []interface{} `json:"enum,omitempty"`
165-
}
166172
var x struct {
167-
CommonValidationsOmitZero
168-
SimpleSchemaOmitZero
169-
Ref string `json:"$ref,omitempty"`
173+
CommonValidations commonValidationsOmitZero `json:",inline"`
174+
SimpleSchema simpleSchemaOmitZero `json:",inline"`
175+
Ref string `json:"$ref,omitempty"`
170176
Extensions
171177
}
172-
x.CommonValidationsOmitZero = CommonValidationsOmitZero(i.CommonValidations)
173-
x.SimpleSchemaOmitZero = SimpleSchemaOmitZero(i.SimpleSchema)
178+
x.CommonValidations = commonValidationsOmitZero(i.CommonValidations)
179+
x.SimpleSchema = simpleSchemaOmitZero(i.SimpleSchema)
174180
x.Ref = i.Refable.Ref.String()
175181
x.Extensions = i.Extensions
176182
return opts.MarshalNext(enc, x)

pkg/validation/spec/operation.go

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,23 @@ type OperationProps struct {
4242
Responses *Responses `json:"responses,omitempty"`
4343
}
4444

45+
// Marshaling structure only, always edit along with corresponding
46+
// struct (or compilation will fail).
47+
type operationPropsOmitZero struct {
48+
Description string `json:"description,omitempty"`
49+
Consumes []string `json:"consumes,omitempty"`
50+
Produces []string `json:"produces,omitempty"`
51+
Schemes []string `json:"schemes,omitempty"`
52+
Tags []string `json:"tags,omitempty"`
53+
Summary string `json:"summary,omitempty"`
54+
ExternalDocs *ExternalDocumentation `json:"externalDocs,omitzero"`
55+
ID string `json:"operationId,omitempty"`
56+
Deprecated bool `json:"deprecated,omitempty,omitzero"`
57+
Security []map[string][]string `json:"security,omitempty"`
58+
Parameters []Parameter `json:"parameters,omitempty"`
59+
Responses *Responses `json:"responses,omitzero"`
60+
}
61+
4562
// MarshalJSON takes care of serializing operation properties to JSON
4663
//
4764
// We use a custom marhaller here to handle a special cases related to
@@ -123,25 +140,11 @@ func (o Operation) MarshalJSON() ([]byte, error) {
123140
}
124141

125142
func (o Operation) MarshalNextJSON(opts jsonv2.MarshalOptions, enc *jsonv2.Encoder) error {
126-
type OperationPropsOmitZero struct {
127-
Description string `json:"description,omitempty"`
128-
Consumes []string `json:"consumes,omitempty"`
129-
Produces []string `json:"produces,omitempty"`
130-
Schemes []string `json:"schemes,omitempty"`
131-
Tags []string `json:"tags,omitempty"`
132-
Summary string `json:"summary,omitempty"`
133-
ExternalDocs *ExternalDocumentation `json:"externalDocs,omitzero"`
134-
ID string `json:"operationId,omitempty"`
135-
Deprecated bool `json:"deprecated,omitempty,omitzero"`
136-
Security []map[string][]string `json:"security,omitempty"`
137-
Parameters []Parameter `json:"parameters,omitempty"`
138-
Responses *Responses `json:"responses,omitzero"`
139-
}
140143
var x struct {
141144
Extensions
142-
OperationPropsOmitZero
145+
OperationProps operationPropsOmitZero `json:",inline"`
143146
}
144147
x.Extensions = o.Extensions
145-
x.OperationPropsOmitZero = OperationPropsOmitZero(o.OperationProps)
148+
x.OperationProps = operationPropsOmitZero(o.OperationProps)
146149
return opts.MarshalNext(enc, x)
147150
}

pkg/validation/spec/parameter.go

Lines changed: 18 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,17 @@ type ParamProps struct {
3636
AllowEmptyValue bool `json:"allowEmptyValue,omitempty"`
3737
}
3838

39+
// Marshaling structure only, always edit along with corresponding
40+
// struct (or compilation will fail).
41+
type paramPropsOmitZero struct {
42+
Description string `json:"description,omitempty"`
43+
Name string `json:"name,omitempty"`
44+
In string `json:"in,omitempty"`
45+
Required bool `json:"required,omitzero"`
46+
Schema *Schema `json:"schema,omitzero"`
47+
AllowEmptyValue bool `json:"allowEmptyValue,omitzero"`
48+
}
49+
3950
// Parameter a unique parameter is defined by a combination of a [name](#parameterName) and [location](#parameterIn).
4051
//
4152
// There are five possible parameter types.
@@ -149,48 +160,17 @@ func (p Parameter) MarshalJSON() ([]byte, error) {
149160
}
150161

151162
func (p Parameter) MarshalNextJSON(opts jsonv2.MarshalOptions, enc *jsonv2.Encoder) error {
152-
type ParamPropsOmitZero struct {
153-
Description string `json:"description,omitempty"`
154-
Name string `json:"name,omitempty"`
155-
In string `json:"in,omitempty"`
156-
Required bool `json:"required,omitzero"`
157-
Schema *Schema `json:"schema,omitzero"`
158-
AllowEmptyValue bool `json:"allowEmptyValue,omitzero"`
159-
}
160-
type SimpleSchemaOmitZero struct {
161-
Type string `json:"type,omitempty"`
162-
Nullable bool `json:"nullable,omitzero"`
163-
Format string `json:"format,omitempty"`
164-
Items *Items `json:"items,omitzero"`
165-
CollectionFormat string `json:"collectionFormat,omitempty"`
166-
Default interface{} `json:"default,omitempty"`
167-
Example interface{} `json:"example,omitempty"`
168-
}
169-
type CommonValidationsOmitZero struct {
170-
Maximum *float64 `json:"maximum,omitempty"`
171-
ExclusiveMaximum bool `json:"exclusiveMaximum,omitzero"`
172-
Minimum *float64 `json:"minimum,omitempty"`
173-
ExclusiveMinimum bool `json:"exclusiveMinimum,omitzero"`
174-
MaxLength *int64 `json:"maxLength,omitempty"`
175-
MinLength *int64 `json:"minLength,omitempty"`
176-
Pattern string `json:"pattern,omitempty"`
177-
MaxItems *int64 `json:"maxItems,omitempty"`
178-
MinItems *int64 `json:"minItems,omitempty"`
179-
UniqueItems bool `json:"uniqueItems,omitzero"`
180-
MultipleOf *float64 `json:"multipleOf,omitempty"`
181-
Enum []interface{} `json:"enum,omitempty"`
182-
}
183163
var x struct {
184-
CommonValidationsOmitZero
185-
SimpleSchemaOmitZero
164+
CommonValidations commonValidationsOmitZero `json:",inline"`
165+
SimpleSchema simpleSchemaOmitZero `json:",inline"`
166+
ParamProps paramPropsOmitZero `json:",inline"`
167+
Ref string `json:"$ref,omitempty"`
186168
Extensions
187-
ParamPropsOmitZero
188-
Ref string `json:"$ref,omitempty"`
189169
}
190-
x.CommonValidationsOmitZero = CommonValidationsOmitZero(p.CommonValidations)
191-
x.SimpleSchemaOmitZero = SimpleSchemaOmitZero(p.SimpleSchema)
170+
x.CommonValidations = commonValidationsOmitZero(p.CommonValidations)
171+
x.SimpleSchema = simpleSchemaOmitZero(p.SimpleSchema)
192172
x.Extensions = p.Extensions
193-
x.ParamPropsOmitZero = ParamPropsOmitZero(p.ParamProps)
173+
x.ParamProps = paramPropsOmitZero(p.ParamProps)
194174
x.Ref = p.Refable.Ref.String()
195175
return opts.MarshalNext(enc, x)
196176
}

pkg/validation/spec/response.go

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,15 @@ type ResponseProps struct {
3030
Examples map[string]interface{} `json:"examples,omitempty"`
3131
}
3232

33+
// Marshaling structure only, always edit along with corresponding
34+
// struct (or compilation will fail).
35+
type responsePropsOmitZero struct {
36+
Description string `json:"description,omitempty"`
37+
Schema *Schema `json:"schema,omitzero"`
38+
Headers map[string]Header `json:"headers,omitempty"`
39+
Examples map[string]interface{} `json:"examples,omitempty"`
40+
}
41+
3342
// Response describes a single response from an API Operation.
3443
//
3544
// For more information: http://goo.gl/8us55a#responseObject
@@ -104,20 +113,14 @@ func (r Response) MarshalJSON() ([]byte, error) {
104113
}
105114

106115
func (r Response) MarshalNextJSON(opts jsonv2.MarshalOptions, enc *jsonv2.Encoder) error {
107-
type ResponsePropsOmitZero struct {
108-
Description string `json:"description,omitempty"`
109-
Schema *Schema `json:"schema,omitzero"`
110-
Headers map[string]Header `json:"headers,omitempty"`
111-
Examples map[string]interface{} `json:"examples,omitempty"`
112-
}
113116
var x struct {
114117
Ref string `json:"$ref,omitempty"`
115118
Extensions
116-
ResponsePropsOmitZero
119+
ResponseProps responsePropsOmitZero `json:",inline"`
117120
}
118121
x.Ref = r.Refable.Ref.String()
119122
x.Extensions = r.Extensions
120-
x.ResponsePropsOmitZero = ResponsePropsOmitZero(r.ResponseProps)
123+
x.ResponseProps = responsePropsOmitZero(r.ResponseProps)
121124
return opts.MarshalNext(enc, x)
122125
}
123126

0 commit comments

Comments
 (0)