...
1
16
17 package spec3
18
19 import (
20 "encoding/json"
21
22 "github.com/go-openapi/swag"
23 "k8s.io/kube-openapi/pkg/internal"
24 jsonv2 "k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json"
25 "k8s.io/kube-openapi/pkg/validation/spec"
26 )
27
28
29
30
31 type MediaType struct {
32 MediaTypeProps
33 spec.VendorExtensible
34 }
35
36
37 func (m *MediaType) MarshalJSON() ([]byte, error) {
38 if internal.UseOptimizedJSONMarshalingV3 {
39 return internal.DeterministicMarshal(m)
40 }
41 b1, err := json.Marshal(m.MediaTypeProps)
42 if err != nil {
43 return nil, err
44 }
45 b2, err := json.Marshal(m.VendorExtensible)
46 if err != nil {
47 return nil, err
48 }
49 return swag.ConcatJSON(b1, b2), nil
50 }
51
52 func (e *MediaType) MarshalNextJSON(opts jsonv2.MarshalOptions, enc *jsonv2.Encoder) error {
53 var x struct {
54 MediaTypeProps mediaTypePropsOmitZero `json:",inline"`
55 spec.Extensions
56 }
57 x.Extensions = internal.SanitizeExtensions(e.Extensions)
58 x.MediaTypeProps = mediaTypePropsOmitZero(e.MediaTypeProps)
59 return opts.MarshalNext(enc, x)
60 }
61
62 func (m *MediaType) UnmarshalJSON(data []byte) error {
63 if internal.UseOptimizedJSONUnmarshalingV3 {
64 return jsonv2.Unmarshal(data, m)
65 }
66 if err := json.Unmarshal(data, &m.MediaTypeProps); err != nil {
67 return err
68 }
69 if err := json.Unmarshal(data, &m.VendorExtensible); err != nil {
70 return err
71 }
72 return nil
73 }
74
75 func (m *MediaType) UnmarshalNextJSON(opts jsonv2.UnmarshalOptions, dec *jsonv2.Decoder) error {
76 var x struct {
77 spec.Extensions
78 MediaTypeProps
79 }
80 if err := opts.UnmarshalNext(dec, &x); err != nil {
81 return err
82 }
83 m.Extensions = internal.SanitizeExtensions(x.Extensions)
84 m.MediaTypeProps = x.MediaTypeProps
85
86 return nil
87 }
88
89
90 type MediaTypeProps struct {
91
92 Schema *spec.Schema `json:"schema,omitempty"`
93
94 Example interface{} `json:"example,omitempty"`
95
96 Examples map[string]*Example `json:"examples,omitempty"`
97
98 Encoding map[string]*Encoding `json:"encoding,omitempty"`
99 }
100
101 type mediaTypePropsOmitZero struct {
102 Schema *spec.Schema `json:"schema,omitzero"`
103 Example interface{} `json:"example,omitempty"`
104 Examples map[string]*Example `json:"examples,omitempty"`
105 Encoding map[string]*Encoding `json:"encoding,omitempty"`
106 }
107
View as plain text