(token fexpr.Token, fieldResolver FieldResolver)
| 259 | } |
| 260 | |
| 261 | func resolveToken(token fexpr.Token, fieldResolver FieldResolver) (*ResolverResult, error) { |
| 262 | switch token.Type { |
| 263 | case fexpr.TokenIdentifier: |
| 264 | // check for macros |
| 265 | // --- |
| 266 | if macroFunc, ok := identifierMacros[token.Literal]; ok { |
| 267 | placeholder := "t" + security.PseudorandomString(8) |
| 268 | |
| 269 | macroValue, err := macroFunc() |
| 270 | if err != nil { |
| 271 | return nil, err |
| 272 | } |
| 273 | |
| 274 | return &ResolverResult{ |
| 275 | Identifier: "{:" + placeholder + "}", |
| 276 | Params: dbx.Params{placeholder: macroValue}, |
| 277 | }, nil |
| 278 | } |
| 279 | |
| 280 | // custom resolver |
| 281 | // --- |
| 282 | result, err := fieldResolver.Resolve(token.Literal) |
| 283 | if err != nil || result.Identifier == "" { |
| 284 | for k, v := range normalizedIdentifiers { |
| 285 | if strings.EqualFold(k, token.Literal) { |
| 286 | return &ResolverResult{Identifier: v}, nil |
| 287 | } |
| 288 | } |
| 289 | return nil, err |
| 290 | } |
| 291 | |
| 292 | return result, err |
| 293 | case fexpr.TokenText: |
| 294 | placeholder := "t" + security.PseudorandomString(8) |
| 295 | |
| 296 | return &ResolverResult{ |
| 297 | Identifier: "{:" + placeholder + "}", |
| 298 | Params: dbx.Params{placeholder: token.Literal}, |
| 299 | }, nil |
| 300 | case fexpr.TokenNumber: |
| 301 | placeholder := "t" + security.PseudorandomString(8) |
| 302 | |
| 303 | return &ResolverResult{ |
| 304 | Identifier: "{:" + placeholder + "}", |
| 305 | Params: dbx.Params{placeholder: cast.ToFloat64(token.Literal)}, |
| 306 | }, nil |
| 307 | case fexpr.TokenFunction: |
| 308 | fn, ok := TokenFunctions[token.Literal] |
| 309 | if !ok { |
| 310 | return nil, fmt.Errorf("unknown function %q", token.Literal) |
| 311 | } |
| 312 | |
| 313 | args, _ := token.Meta.([]fexpr.Token) |
| 314 | return fn(func(argToken fexpr.Token) (*ResolverResult, error) { |
| 315 | return resolveToken(argToken, fieldResolver) |
| 316 | }, args...) |
| 317 | } |
| 318 |
no test coverage detected
searching dependent graphs…