in internal/protocoltest/jsonrpc/deserializers.go [2373:2664]
func awsAwsjson11_deserializeDocumentKitchenSink(v **types.KitchenSink, 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 *types.KitchenSink
if *v == nil {
sv = &types.KitchenSink{}
} else {
sv = *v
}
for key, value := range shape {
switch key {
case "Blob":
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.Blob = dv
}
case "Boolean":
if value != nil {
jtv, ok := value.(bool)
if !ok {
return fmt.Errorf("expected Boolean to be of type *bool, got %T instead", value)
}
sv.Boolean = ptr.Bool(jtv)
}
case "Double":
if value != nil {
switch jtv := value.(type) {
case json.Number:
f64, err := jtv.Float64()
if err != nil {
return err
}
sv.Double = 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.Double = ptr.Float64(f64)
default:
return fmt.Errorf("expected Double to be a JSON Number, got %T instead", value)
}
}
case "EmptyStruct":
if err := awsAwsjson11_deserializeDocumentEmptyStruct(&sv.EmptyStruct, value); err != nil {
return err
}
case "Float":
if value != nil {
switch jtv := value.(type) {
case json.Number:
f64, err := jtv.Float64()
if err != nil {
return err
}
sv.Float = 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.Float = ptr.Float32(float32(f64))
default:
return fmt.Errorf("expected Float to be a JSON Number, got %T instead", value)
}
}
case "HttpdateTimestamp":
if value != nil {
jtv, ok := value.(string)
if !ok {
return fmt.Errorf("expected Timestamp to be of type string, got %T instead", value)
}
t, err := smithytime.ParseHTTPDate(jtv)
if err != nil {
return err
}
sv.HttpdateTimestamp = ptr.Time(t)
}
case "Integer":
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.Integer = ptr.Int32(int32(i64))
}
case "Iso8601Timestamp":
if value != nil {
jtv, ok := value.(string)
if !ok {
return fmt.Errorf("expected Timestamp to be of type string, got %T instead", value)
}
t, err := smithytime.ParseDateTime(jtv)
if err != nil {
return err
}
sv.Iso8601Timestamp = ptr.Time(t)
}
case "JsonValue":
if value != nil {
jtv, ok := value.(string)
if !ok {
return fmt.Errorf("expected JsonValue to be of type string, got %T instead", value)
}
sv.JsonValue = ptr.String(jtv)
}
case "ListOfLists":
if err := awsAwsjson11_deserializeDocumentListOfListOfStrings(&sv.ListOfLists, value); err != nil {
return err
}
case "ListOfMapsOfStrings":
if err := awsAwsjson11_deserializeDocumentListOfMapsOfStrings(&sv.ListOfMapsOfStrings, value); err != nil {
return err
}
case "ListOfStrings":
if err := awsAwsjson11_deserializeDocumentListOfStrings(&sv.ListOfStrings, value); err != nil {
return err
}
case "ListOfStructs":
if err := awsAwsjson11_deserializeDocumentListOfStructs(&sv.ListOfStructs, value); err != nil {
return err
}
case "Long":
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.Long = ptr.Int64(i64)
}
case "MapOfListsOfStrings":
if err := awsAwsjson11_deserializeDocumentMapOfListsOfStrings(&sv.MapOfListsOfStrings, value); err != nil {
return err
}
case "MapOfMaps":
if err := awsAwsjson11_deserializeDocumentMapOfMapOfStrings(&sv.MapOfMaps, value); err != nil {
return err
}
case "MapOfStrings":
if err := awsAwsjson11_deserializeDocumentMapOfStrings(&sv.MapOfStrings, value); err != nil {
return err
}
case "MapOfStructs":
if err := awsAwsjson11_deserializeDocumentMapOfStructs(&sv.MapOfStructs, value); err != nil {
return err
}
case "RecursiveList":
if err := awsAwsjson11_deserializeDocumentListOfKitchenSinks(&sv.RecursiveList, value); err != nil {
return err
}
case "RecursiveMap":
if err := awsAwsjson11_deserializeDocumentMapOfKitchenSinks(&sv.RecursiveMap, value); err != nil {
return err
}
case "RecursiveStruct":
if err := awsAwsjson11_deserializeDocumentKitchenSink(&sv.RecursiveStruct, value); err != nil {
return err
}
case "SimpleStruct":
if err := awsAwsjson11_deserializeDocumentSimpleStruct(&sv.SimpleStruct, value); err != nil {
return err
}
case "String":
if value != nil {
jtv, ok := value.(string)
if !ok {
return fmt.Errorf("expected String to be of type string, got %T instead", value)
}
sv.String_ = ptr.String(jtv)
}
case "StructWithJsonName":
if err := awsAwsjson11_deserializeDocumentStructWithJsonName(&sv.StructWithJsonName, value); err != nil {
return err
}
case "Timestamp":
if value != nil {
switch jtv := value.(type) {
case json.Number:
f64, err := jtv.Float64()
if err != nil {
return err
}
sv.Timestamp = ptr.Time(smithytime.ParseEpochSeconds(f64))
default:
return fmt.Errorf("expected Timestamp to be a JSON Number, got %T instead", value)
}
}
case "UnixTimestamp":
if value != nil {
switch jtv := value.(type) {
case json.Number:
f64, err := jtv.Float64()
if err != nil {
return err
}
sv.UnixTimestamp = ptr.Time(smithytime.ParseEpochSeconds(f64))
default:
return fmt.Errorf("expected Timestamp to be a JSON Number, got %T instead", value)
}
}
default:
_, _ = key, value
}
}
*v = sv
return nil
}