in dax/internal/client/response.go [874:928]
func decodeScanQueryItems(ctx context.Context, reader *cbor.Reader, table string, keySchemaCache *lru.Lru, attrNamesListToId *lru.Lru, projectionOrdinals []documentPath) ([]map[string]types.AttributeValue, error) {
consumed, err := consumeNil(reader)
if err != nil {
return nil, err
}
if consumed {
return nil, nil
}
items := []map[string]types.AttributeValue{}
if len(projectionOrdinals) > 0 {
err := consumeArray(reader, func(reader *cbor.Reader) error {
i, err := decodeProjection(reader, projectionOrdinals)
if err != nil {
return err
}
items = append(items, i)
return nil
})
if err != nil {
return nil, err
}
} else {
tableKeys, err := getKeySchema(ctx, keySchemaCache, table)
if err != nil {
return nil, err
}
err = consumeArray(reader, func(reader *cbor.Reader) error {
len, err := reader.ReadArrayLength()
if err != nil {
return err
}
if len != 2 {
return &smithy.SerializationError{Err: fmt.Errorf("expected array of size 2 containing key and value, got %d", len)}
}
key, err := decodeKey(reader, tableKeys)
if err != nil {
return err
}
item, err := decodeNonKeyAttributes(ctx, reader, attrNamesListToId, projectionOrdinals)
if err != nil {
return err
}
for k, v := range key {
item[k] = v
}
items = append(items, item)
return nil
})
if err != nil {
return nil, err
}
}
return items, nil
}