type ObjectVal … // NewObjectVal creates an ObjectVal by its TypeRef and its fields. func NewObjectVal(typeRef TypeRef, fields map[string]ref.Val) *ObjectVal { … } var _ … var _ … // ConvertToNative converts the object to map[string]any. // All nested lists are converted into []any native type. // // It returns an error if the target type is not map[string]any, // or any recursive conversion fails. func (v *ObjectVal) ConvertToNative(typeDesc reflect.Type) (any, error) { … } // ConvertToType supports type conversions between CEL value types supported by the expression language. func (v *ObjectVal) ConvertToType(typeValue ref.Type) ref.Val { … } // Equal returns true if the `other` value has the same type and content as the implementing struct. func (v *ObjectVal) Equal(other ref.Val) ref.Val { … } // Type returns the TypeValue of the value. func (v *ObjectVal) Type() ref.Type { … } // Value returns its value as a map[string]any. func (v *ObjectVal) Value() any { … } // IsZeroValue indicates whether the object is the zero value for the type. // For the ObjectVal, it is zero value if and only if the fields map is empty. func (v *ObjectVal) IsZeroValue() bool { … } // convertField converts a referred ref.Val to its expected type. // For objects, the expected type is map[string]any // For lists, the expected type is []any // For maps, the expected type is map[string]any // For anything else, it is converted via value.Value() // // It will return an error if the request type is a map but the key // is not a string. func convertField(value ref.Val) (any, error) { … }