type ValidationOptions … const AllowDuplicates … // AsTyped accepts a value and a type and returns a TypedValue. 'v' must have // type 'typeName' in the schema. An error is returned if the v doesn't conform // to the schema. func AsTyped(v value.Value, s *schema.Schema, typeRef schema.TypeRef, opts ...ValidationOptions) (*TypedValue, error) { … } // AsTypeUnvalidated is just like AsTyped, but doesn't validate that the type // conforms to the schema, for cases where that has already been checked or // where you're going to call a method that validates as a side-effect (like // ToFieldSet). // // Deprecated: This function was initially created because validation // was expensive. Now that this has been solved, objects should always // be created as validated, using `AsTyped`. func AsTypedUnvalidated(v value.Value, s *schema.Schema, typeRef schema.TypeRef) *TypedValue { … } type TypedValue … // TypeRef is the type of the value. func (tv TypedValue) TypeRef() schema.TypeRef { … } // AsValue removes the type from the TypedValue and only keeps the value. func (tv TypedValue) AsValue() value.Value { … } // Schema gets the schema from the TypedValue. func (tv TypedValue) Schema() *schema.Schema { … } // Validate returns an error with a list of every spec violation. func (tv TypedValue) Validate(opts ...ValidationOptions) error { … } // ToFieldSet creates a set containing every leaf field and item mentioned, or // validation errors, if any were encountered. func (tv TypedValue) ToFieldSet() (*fieldpath.Set, error) { … } // Merge returns the result of merging tv and pso ("partially specified // object") together. Of note: // - No fields can be removed by this operation. // - If both tv and pso specify a given leaf field, the result will keep pso's // value. // - Container typed elements will have their items ordered: // 1. like tv, if pso doesn't change anything in the container // 2. like pso, if pso does change something in the container. // // tv and pso must both be of the same type (their Schema and TypeRef must // match), or an error will be returned. Validation errors will be returned if // the objects don't conform to the schema. func (tv TypedValue) Merge(pso *TypedValue) (*TypedValue, error) { … } var cmpwPool … // Compare compares the two objects. See the comments on the `Comparison` // struct for details on the return value. // // tv and rhs must both be of the same type (their Schema and TypeRef must // match), or an error will be returned. Validation errors will be returned if // the objects don't conform to the schema. func (tv TypedValue) Compare(rhs *TypedValue) (c *Comparison, err error) { … } // RemoveItems removes each provided list or map item from the value. func (tv TypedValue) RemoveItems(items *fieldpath.Set) *TypedValue { … } // ExtractItems returns a value with only the provided list or map items extracted from the value. func (tv TypedValue) ExtractItems(items *fieldpath.Set) *TypedValue { … } func (tv TypedValue) Empty() *TypedValue { … } var mwPool … func merge(lhs, rhs *TypedValue, rule, postRule mergeRule) (*TypedValue, error) { … }