MCPcopy Create free account
hub / github.com/aws/smithy-go / encodeStruct

Method encodeStruct

document/json/encoder.go:137–180  ·  view source on GitHub ↗
(vp valueProvider, rv reflect.Value)

Source from the content-addressed store, hash-verified

135}
136
137func (e *Encoder) encodeStruct(vp valueProvider, rv reflect.Value) error {
138 if rv.CanInterface() && document.IsNoSerde(rv.Interface()) {
139 return &document.UnmarshalTypeError{
140 Value: fmt.Sprintf("unsupported type"),
141 Type: rv.Type(),
142 }
143 }
144
145 switch {
146 case rv.Type().ConvertibleTo(serde.ReflectTypeOf.Time):
147 return &document.InvalidMarshalError{
148 Message: fmt.Sprintf("unsupported type %s", rv.Type().String()),
149 }
150 case rv.Type().ConvertibleTo(serde.ReflectTypeOf.BigFloat):
151 fallthrough
152 case rv.Type().ConvertibleTo(serde.ReflectTypeOf.BigInt):
153 return e.encodeNumber(vp, rv)
154 }
155
156 object := vp.GetValue().Object()
157 defer object.Close()
158
159 fields := serde.GetStructFields(rv.Type())
160 for _, f := range fields.All() {
161 if f.Name == "" {
162 return &document.InvalidMarshalError{Message: "map key cannot be empty"}
163 }
164
165 fv, found := serde.EncoderFieldByIndex(rv, f.Index)
166 if !found {
167 continue
168 }
169
170 err := e.encode(jsonObjectKeyProvider{
171 Object: object,
172 Key: f.Name,
173 }, fv, f.Tag)
174 if err != nil {
175 return err
176 }
177 }
178
179 return nil
180}
181
182func (e *Encoder) encodeMap(vp valueProvider, rv reflect.Value) error {
183 object := vp.GetValue().Object()

Callers 1

encodeMethod · 0.95

Calls 10

encodeNumberMethod · 0.95
encodeMethod · 0.95
IsNoSerdeFunction · 0.92
GetStructFieldsFunction · 0.92
EncoderFieldByIndexFunction · 0.92
ObjectMethod · 0.80
AllMethod · 0.80
StringMethod · 0.65
GetValueMethod · 0.65
CloseMethod · 0.45

Tested by

no test coverage detected