/* WITHIN evaluates to TRUE if the right-hand-side first value contains the left-hand-side second value (or name and value) as a child or descendant (i.e. directly or indirectly). If either of the input operands are missing, return missing value, and if the first operand is not an array and the second is not an object return a null value. Range through the descendants of the second value object, and check if the first value is equal to each descendant; return true. For all other cases return false. */ func (this *Within) Apply(context Context, first, second value.Value) (value.Value, error) { if first.Type() == value.MISSING || second.Type() == value.MISSING { return value.MISSING_VALUE, nil } else if second.Type() != value.ARRAY && second.Type() != value.OBJECT { return value.NULL_VALUE, nil } desc := second.Descendants(make([]interface{}, 0, 64)) for _, d := range desc { if first.Equals(value.NewValue(d)) { return value.TRUE_VALUE, nil } } return value.FALSE_VALUE, nil }