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 } }