in dax/internal/client/legacy.go [329:385]
func translateAttributeUpdates(avus map[string]types.AttributeValueUpdate, subs map[string]string, vars map[string]types.AttributeValue) (*string, map[string]string, map[string]types.AttributeValue, error) {
var sets, adds, dels, rems []string
for a, avu := range avus {
act := types.AttributeActionPut
if avu.Action != "" {
act = avu.Action
}
if avu.Value == nil && act != types.AttributeActionDelete {
return nil, subs, vars, &smithy.GenericAPIError{
Code: ErrCodeValidationException,
Message: "only DELETE action is allowed when no attribute value is specified",
Fault: smithy.FaultClient,
}
}
var an, av string
subs, an = appendAttributeName(subs, a)
if avu.Value != nil {
vars, av = appendAttributeValue(vars, avu.Value)
}
switch act {
case types.AttributeActionPut:
sets = append(sets, fmt.Sprintf("%s=%s", an, av))
case types.AttributeActionAdd:
adds = append(adds, fmt.Sprintf("%s %s", an, av))
case types.AttributeActionDelete:
if len(av) == 0 {
rems = append(rems, an)
} else {
dels = append(dels, fmt.Sprintf("%s %s", an, av))
}
default:
return nil, subs, vars, &smithy.GenericAPIError{
Code: ErrCodeValidationException,
Message: fmt.Sprintf("unknown AttributeValueUpdate Action: %s", act),
Fault: smithy.FaultClient,
}
}
}
var all []string
if len(sets) > 0 {
all = append(all, fmt.Sprintf("set %s", strings.Join(sets, ",")))
}
if len(adds) > 0 {
all = append(all, fmt.Sprintf("add %s", strings.Join(adds, ",")))
}
if len(dels) > 0 {
all = append(all, fmt.Sprintf("delete %s", strings.Join(dels, ",")))
}
if len(rems) > 0 {
all = append(all, fmt.Sprintf("remove %s", strings.Join(rems, ",")))
}
return aws.String(strings.Join(all, " ")), subs, vars, nil
}