in pkg/ottl/functions.go [437:526]
func (p *Parser[K]) buildSliceArg(argVal value, argType reflect.Type) (any, error) {
name := argType.Elem().Name()
switch {
case name == reflect.Uint8.String():
if argVal.Bytes == nil {
return nil, fmt.Errorf("slice parameter must be a byte slice literal")
}
return ([]byte)(*argVal.Bytes), nil
case name == reflect.String.String():
arg, err := buildSlice[string](argVal, argType, p.buildArg, name)
if err != nil {
return nil, err
}
return arg, nil
case name == reflect.Float64.String():
arg, err := buildSlice[float64](argVal, argType, p.buildArg, name)
if err != nil {
return nil, err
}
return arg, nil
case name == reflect.Int64.String():
arg, err := buildSlice[int64](argVal, argType, p.buildArg, name)
if err != nil {
return nil, err
}
return arg, nil
case strings.HasPrefix(name, "Getter"):
arg, err := buildSlice[Getter[K]](argVal, argType, p.buildArg, name)
if err != nil {
return nil, err
}
return arg, nil
case strings.HasPrefix(name, "PMapGetter"):
arg, err := buildSlice[PMapGetter[K]](argVal, argType, p.buildArg, name)
if err != nil {
return nil, err
}
return arg, nil
case strings.HasPrefix(name, "StringGetter"):
arg, err := buildSlice[StringGetter[K]](argVal, argType, p.buildArg, name)
if err != nil {
return nil, err
}
return arg, nil
case strings.HasPrefix(name, "StringLikeGetter"):
arg, err := buildSlice[StringLikeGetter[K]](argVal, argType, p.buildArg, name)
if err != nil {
return nil, err
}
return arg, nil
case strings.HasPrefix(name, "FloatGetter"):
arg, err := buildSlice[FloatGetter[K]](argVal, argType, p.buildArg, name)
if err != nil {
return nil, err
}
return arg, nil
case strings.HasPrefix(name, "FloatLikeGetter"):
arg, err := buildSlice[FloatLikeGetter[K]](argVal, argType, p.buildArg, name)
if err != nil {
return nil, err
}
return arg, nil
case strings.HasPrefix(name, "IntGetter"):
arg, err := buildSlice[IntGetter[K]](argVal, argType, p.buildArg, name)
if err != nil {
return nil, err
}
return arg, nil
case strings.HasPrefix(name, "IntLikeGetter"):
arg, err := buildSlice[IntLikeGetter[K]](argVal, argType, p.buildArg, name)
if err != nil {
return nil, err
}
return arg, nil
case strings.HasPrefix(name, "DurationGetter"):
arg, err := buildSlice[DurationGetter[K]](argVal, argType, p.buildArg, name)
if err != nil {
return nil, err
}
return arg, nil
case strings.HasPrefix(name, "TimeGetter"):
arg, err := buildSlice[TimeGetter[K]](argVal, argType, p.buildArg, name)
if err != nil {
return nil, err
}
return arg, nil
default:
return nil, fmt.Errorf("unsupported slice type %q for function", argType.Elem().Name())
}
}