(ctx expr.EvalContext, vals []value.Value)
| 294 | } |
| 295 | |
| 296 | func joinEval(ctx expr.EvalContext, vals []value.Value) (value.Value, bool) { |
| 297 | sep, ok := value.ValueToString(vals[len(vals)-1]) |
| 298 | if !ok { |
| 299 | return value.EmptyStringValue, false |
| 300 | } |
| 301 | args := make([]string, 0) |
| 302 | for i := 0; i < len(vals)-1; i++ { |
| 303 | switch valTyped := vals[i].(type) { |
| 304 | case value.SliceValue: |
| 305 | svals := make([]string, len(valTyped.Val())) |
| 306 | for i, sv := range valTyped.Val() { |
| 307 | svals[i] = sv.ToString() |
| 308 | } |
| 309 | args = append(args, svals...) |
| 310 | case value.StringsValue: |
| 311 | svals := make([]string, len(valTyped.Val())) |
| 312 | for i, sv := range valTyped.Val() { |
| 313 | svals[i] = sv |
| 314 | } |
| 315 | args = append(args, svals...) |
| 316 | case value.StringValue, value.NumberValue, value.IntValue: |
| 317 | val := valTyped.ToString() |
| 318 | if val == "" { |
| 319 | continue |
| 320 | } |
| 321 | args = append(args, val) |
| 322 | } |
| 323 | } |
| 324 | if len(args) == 0 { |
| 325 | return value.EmptyStringValue, false |
| 326 | } |
| 327 | return value.NewStringValue(strings.Join(args, sep)), true |
| 328 | } |
| 329 | |
| 330 | // HasPrefix string evaluation to see if string begins with |
| 331 | // |
nothing calls this directly
no test coverage detected