in dax/internal/client/response.go [745:811]
func decodeTransactWriteItemsOutput(ctx context.Context, reader *cbor.Reader, input *dynamodb.TransactWriteItemsInput, keySchemaCache *lru.Lru, attrListIdToNames *lru.Lru, output *dynamodb.TransactWriteItemsOutput) (*dynamodb.TransactWriteItemsOutput, error) {
len, err := reader.ReadArrayLength()
if err != nil {
return output, err
}
if len != 3 {
// returnValues still in the tube even though it's not being returned
// But user shouldn't be able to see it.
return output, &smithy.SerializationError{Err: fmt.Errorf("TransactWriteResponse needs to have 2 elements, instead had: %d", len)}
}
_, err = reader.ReadArrayLength()
if err != nil {
return output, err
}
if output == nil {
output = &dynamodb.TransactWriteItemsOutput{}
}
numCC, err := reader.ReadArrayLength()
if err != nil {
return output, err
}
if numCC > 0 {
output.ConsumedCapacity = make([]types.ConsumedCapacity, numCC)
for i := 0; i < numCC; i++ {
capacity, err := decodeConsumedCapacityExtended(reader)
if err != nil {
return output, err
}
output.ConsumedCapacity[i] = *capacity
}
}
icmLen, err := reader.ReadMapLength()
if err != nil {
return output, err
}
if icmLen > 0 {
output.ItemCollectionMetrics = make(map[string][]types.ItemCollectionMetrics, icmLen)
for i := 0; i < icmLen; i++ {
table, err := reader.ReadString()
if err != nil {
return output, err
}
keys, err := getKeySchema(ctx, keySchemaCache, table)
if err != nil {
return output, err
}
pkey := *keys[0].AttributeName
numMetrics, err := reader.ReadArrayLength()
if err != nil {
return output, err
}
metrics := make([]types.ItemCollectionMetrics, numMetrics)
for j := 0; j < numMetrics; j++ {
itemCollectionMetric, err := decodeItemCollectionMetrics(reader, pkey)
if err != nil {
return output, err
}
metrics[j] = *itemCollectionMetric
}
output.ItemCollectionMetrics[table] = metrics
}
}
return output, nil
}