| 12345678910111213141516171819202122232425262728293031323334 |
- package ultraviolet
- import (
- "strconv"
- "strings"
- )
- type Selector func(expression any) *SQ
- func ExpressionToSelector(expression string) Selector {
- return func(value any) *SQ {
- // TODO: lock value mutex
- parts := strings.Split(expression, ".")
- result := NewSQ(value)
- for _, part := range parts {
- index, err := strconv.Atoi(part)
- if err == nil {
- result = result.Index(index)
- continue
- }
- resultField := result.Field(part)
- if resultField != nil {
- result = resultField
- continue
- }
- result = result.Key(part)
- }
- return result
- }
- }
|