func decodeScanQueryItems()

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
}