func decodeTransactWriteItemsOutput()

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
}