in internal/protocoltest/jsonrpc10/deserializers.go [2572:2976]
func awsAwsjson10_deserializeOpDocumentOperationWithDefaultsOutput(v **OperationWithDefaultsOutput, value interface{}) error {
if v == nil {
return fmt.Errorf("unexpected nil of type %T", v)
}
if value == nil {
return nil
}
shape, ok := value.(map[string]interface{})
if !ok {
return fmt.Errorf("unexpected JSON type %v", value)
}
var sv *OperationWithDefaultsOutput
if *v == nil {
sv = &OperationWithDefaultsOutput{}
} else {
sv = *v
}
for key, value := range shape {
switch key {
case "defaultBlob":
if value != nil {
jtv, ok := value.(string)
if !ok {
return fmt.Errorf("expected Blob to be []byte, got %T instead", value)
}
dv, err := base64.StdEncoding.DecodeString(jtv)
if err != nil {
return fmt.Errorf("failed to base64 decode Blob, %w", err)
}
sv.DefaultBlob = dv
}
case "defaultBoolean":
if value != nil {
jtv, ok := value.(bool)
if !ok {
return fmt.Errorf("expected Boolean to be of type *bool, got %T instead", value)
}
sv.DefaultBoolean = ptr.Bool(jtv)
}
case "defaultByte":
if value != nil {
jtv, ok := value.(json.Number)
if !ok {
return fmt.Errorf("expected Byte to be json.Number, got %T instead", value)
}
i64, err := jtv.Int64()
if err != nil {
return err
}
sv.DefaultByte = ptr.Int8(int8(i64))
}
case "defaultDocumentBoolean":
if err := awsAwsjson10_deserializeDocumentDocument(&sv.DefaultDocumentBoolean, value); err != nil {
return err
}
case "defaultDocumentList":
if err := awsAwsjson10_deserializeDocumentDocument(&sv.DefaultDocumentList, value); err != nil {
return err
}
case "defaultDocumentMap":
if err := awsAwsjson10_deserializeDocumentDocument(&sv.DefaultDocumentMap, value); err != nil {
return err
}
case "defaultDocumentString":
if err := awsAwsjson10_deserializeDocumentDocument(&sv.DefaultDocumentString, value); err != nil {
return err
}
case "defaultDouble":
if value != nil {
switch jtv := value.(type) {
case json.Number:
f64, err := jtv.Float64()
if err != nil {
return err
}
sv.DefaultDouble = ptr.Float64(f64)
case string:
var f64 float64
switch {
case strings.EqualFold(jtv, "NaN"):
f64 = math.NaN()
case strings.EqualFold(jtv, "Infinity"):
f64 = math.Inf(1)
case strings.EqualFold(jtv, "-Infinity"):
f64 = math.Inf(-1)
default:
return fmt.Errorf("unknown JSON number value: %s", jtv)
}
sv.DefaultDouble = ptr.Float64(f64)
default:
return fmt.Errorf("expected Double to be a JSON Number, got %T instead", value)
}
}
case "defaultEnum":
if value != nil {
jtv, ok := value.(string)
if !ok {
return fmt.Errorf("expected TestEnum to be of type string, got %T instead", value)
}
sv.DefaultEnum = types.TestEnum(jtv)
}
case "defaultFloat":
if value != nil {
switch jtv := value.(type) {
case json.Number:
f64, err := jtv.Float64()
if err != nil {
return err
}
sv.DefaultFloat = ptr.Float32(float32(f64))
case string:
var f64 float64
switch {
case strings.EqualFold(jtv, "NaN"):
f64 = math.NaN()
case strings.EqualFold(jtv, "Infinity"):
f64 = math.Inf(1)
case strings.EqualFold(jtv, "-Infinity"):
f64 = math.Inf(-1)
default:
return fmt.Errorf("unknown JSON number value: %s", jtv)
}
sv.DefaultFloat = ptr.Float32(float32(f64))
default:
return fmt.Errorf("expected Float to be a JSON Number, got %T instead", value)
}
}
case "defaultInteger":
if value != nil {
jtv, ok := value.(json.Number)
if !ok {
return fmt.Errorf("expected Integer to be json.Number, got %T instead", value)
}
i64, err := jtv.Int64()
if err != nil {
return err
}
sv.DefaultInteger = ptr.Int32(int32(i64))
}
case "defaultIntEnum":
if value != nil {
jtv, ok := value.(json.Number)
if !ok {
return fmt.Errorf("expected TestIntEnum to be json.Number, got %T instead", value)
}
i64, err := jtv.Int64()
if err != nil {
return err
}
sv.DefaultIntEnum = int32(i64)
}
case "defaultList":
if err := awsAwsjson10_deserializeDocumentTestStringList(&sv.DefaultList, value); err != nil {
return err
}
case "defaultLong":
if value != nil {
jtv, ok := value.(json.Number)
if !ok {
return fmt.Errorf("expected Long to be json.Number, got %T instead", value)
}
i64, err := jtv.Int64()
if err != nil {
return err
}
sv.DefaultLong = ptr.Int64(i64)
}
case "defaultMap":
if err := awsAwsjson10_deserializeDocumentTestStringMap(&sv.DefaultMap, value); err != nil {
return err
}
case "defaultNullDocument":
if err := awsAwsjson10_deserializeDocumentDocument(&sv.DefaultNullDocument, value); err != nil {
return err
}
case "defaultShort":
if value != nil {
jtv, ok := value.(json.Number)
if !ok {
return fmt.Errorf("expected Short to be json.Number, got %T instead", value)
}
i64, err := jtv.Int64()
if err != nil {
return err
}
sv.DefaultShort = ptr.Int16(int16(i64))
}
case "defaultString":
if value != nil {
jtv, ok := value.(string)
if !ok {
return fmt.Errorf("expected String to be of type string, got %T instead", value)
}
sv.DefaultString = ptr.String(jtv)
}
case "defaultTimestamp":
if value != nil {
switch jtv := value.(type) {
case json.Number:
f64, err := jtv.Float64()
if err != nil {
return err
}
sv.DefaultTimestamp = ptr.Time(smithytime.ParseEpochSeconds(f64))
default:
return fmt.Errorf("expected Timestamp to be a JSON Number, got %T instead", value)
}
}
case "emptyBlob":
if value != nil {
jtv, ok := value.(string)
if !ok {
return fmt.Errorf("expected Blob to be []byte, got %T instead", value)
}
dv, err := base64.StdEncoding.DecodeString(jtv)
if err != nil {
return fmt.Errorf("failed to base64 decode Blob, %w", err)
}
sv.EmptyBlob = dv
}
case "emptyString":
if value != nil {
jtv, ok := value.(string)
if !ok {
return fmt.Errorf("expected String to be of type string, got %T instead", value)
}
sv.EmptyString = ptr.String(jtv)
}
case "falseBoolean":
if value != nil {
jtv, ok := value.(bool)
if !ok {
return fmt.Errorf("expected Boolean to be of type *bool, got %T instead", value)
}
sv.FalseBoolean = jtv
}
case "zeroByte":
if value != nil {
jtv, ok := value.(json.Number)
if !ok {
return fmt.Errorf("expected Byte to be json.Number, got %T instead", value)
}
i64, err := jtv.Int64()
if err != nil {
return err
}
sv.ZeroByte = int8(i64)
}
case "zeroDouble":
if value != nil {
switch jtv := value.(type) {
case json.Number:
f64, err := jtv.Float64()
if err != nil {
return err
}
sv.ZeroDouble = f64
case string:
var f64 float64
switch {
case strings.EqualFold(jtv, "NaN"):
f64 = math.NaN()
case strings.EqualFold(jtv, "Infinity"):
f64 = math.Inf(1)
case strings.EqualFold(jtv, "-Infinity"):
f64 = math.Inf(-1)
default:
return fmt.Errorf("unknown JSON number value: %s", jtv)
}
sv.ZeroDouble = f64
default:
return fmt.Errorf("expected Double to be a JSON Number, got %T instead", value)
}
}
case "zeroFloat":
if value != nil {
switch jtv := value.(type) {
case json.Number:
f64, err := jtv.Float64()
if err != nil {
return err
}
sv.ZeroFloat = float32(f64)
case string:
var f64 float64
switch {
case strings.EqualFold(jtv, "NaN"):
f64 = math.NaN()
case strings.EqualFold(jtv, "Infinity"):
f64 = math.Inf(1)
case strings.EqualFold(jtv, "-Infinity"):
f64 = math.Inf(-1)
default:
return fmt.Errorf("unknown JSON number value: %s", jtv)
}
sv.ZeroFloat = float32(f64)
default:
return fmt.Errorf("expected Float to be a JSON Number, got %T instead", value)
}
}
case "zeroInteger":
if value != nil {
jtv, ok := value.(json.Number)
if !ok {
return fmt.Errorf("expected Integer to be json.Number, got %T instead", value)
}
i64, err := jtv.Int64()
if err != nil {
return err
}
sv.ZeroInteger = int32(i64)
}
case "zeroLong":
if value != nil {
jtv, ok := value.(json.Number)
if !ok {
return fmt.Errorf("expected Long to be json.Number, got %T instead", value)
}
i64, err := jtv.Int64()
if err != nil {
return err
}
sv.ZeroLong = i64
}
case "zeroShort":
if value != nil {
jtv, ok := value.(json.Number)
if !ok {
return fmt.Errorf("expected Short to be json.Number, got %T instead", value)
}
i64, err := jtv.Int64()
if err != nil {
return err
}
sv.ZeroShort = int16(i64)
}
default:
_, _ = key, value
}
}
*v = sv
return nil
}