Skip to content

[]interface{} from map cannot be used as []string #789

@KyleSanderson

Description

@KyleSanderson

I've had to write this instead which is a bit wild... what am I doing wrong?

func ToStringSlice(input []interface{}) ([]string, error) {
	out := make([]string, len(input))
	for i, val := range input {
		str, ok := val.(string)
		if !ok {
			return nil, fmt.Errorf("element at index %d is not a string", i)
		}
		out[i] = str
	}
	return out, nil
}

func MustStringSlice(v interface{}) ([]string, error) {
	raw, ok := v.([]interface{})
	if !ok {
		return nil, fmt.Errorf("expected []interface{}, got %T", v)
	}
	return ToStringSlice(raw)
}
		"AddTags": func(hashes []interface{}, tags string) error {
			h, _ := exprutil.MustStringSlice(hashes)
			return c.Client.AddTagsCtx(ctx, h, tags)
		},

Query:

{"level":"trace","program":"test-program","query":"let tor = Imp.GetTorrents(nil); Imp.AddTags(map(filter(tor, .Name contains `The.Clams`), .Hash), `yams`)","error":"reflect: Call using []interface {} as type []string (1:37)\n | let tor = Imp.GetTorrents(nil); Imp.AddTags(map(filter(tor, .Name contains `The.Clams`), .Hash), `yams`)\n | ....................................^","time":1747295553,"message":"expr completed: <nil>"}

What I expected to work...

let tor = Imp.GetTorrents(nil);
     Imp.AddTags(map(filter(tor, .Name contains `The.Clams`), string(.Hash)), `yams`)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions