Documentation
¶
Index ¶
- func Populate(source any, target any) error
- func SyncValue(ctx context.Context, source any, target any, valueNode *yaml.Node, ...) (node *yaml.Node, err error)
- func Unmarshal(ctx context.Context, node *yaml.Node, out any) error
- func UnmarshalExtension(keyNode *yaml.Node, valueNode *yaml.Node, extensionsField reflect.Value) error
- func UnmarshalKeyValuePair(ctx context.Context, keyNode, valueNode *yaml.Node, outValue any) error
- func UnmarshalModel(ctx context.Context, node *yaml.Node, structPtr any) error
- type CoreAccessor
- type CoreModel
- type CoreModeler
- type CoreSetter
- type Extension
- type ExtensionCoreMap
- type ExtensionMap
- type ExtensionSourceIterator
- type Model
- type Node
- func (n Node[V]) GetKeyNodeOrRoot(rootNode *yaml.Node) *yaml.Node
- func (n Node[V]) GetMapKeyNodeOrRoot(key string, rootNode *yaml.Node) *yaml.Node
- func (n Node[V]) GetMapValueNodeOrRoot(key string, rootNode *yaml.Node) *yaml.Node
- func (n Node[V]) GetNavigableNode() (any, error)
- func (n Node[V]) GetSliceValueNodeOrRoot(idx int, rootNode *yaml.Node) *yaml.Node
- func (n Node[V]) GetValue() any
- func (n Node[V]) GetValueNodeOrRoot(rootNode *yaml.Node) *yaml.Node
- func (n Node[V]) GetValueType() reflect.Type
- func (n *Node[V]) SetPresent(present bool)
- func (n *Node[V]) SyncValue(ctx context.Context, key string, value any) (*yaml.Node, *yaml.Node, error)
- func (n *Node[V]) Unmarshal(ctx context.Context, keyNode, valueNode *yaml.Node) error
- type NodeAccessor
- type NodeMutator
- type Populator
- type RootNodeAccessor
- type Syncer
- type SyncerWithSyncFunc
- type Unmarshallable
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func UnmarshalExtension ¶ added in v0.2.1
func UnmarshalKeyValuePair ¶ added in v0.2.1
Types ¶
type CoreAccessor ¶ added in v0.2.1
type CoreAccessor[T any] interface { GetCore() *T SetCore(core *T) }
CoreAccessor provides type-safe access to the core field in models
type CoreModel ¶ added in v0.2.1
type CoreModel struct { RootNode *yaml.Node Valid bool // contains filtered or unexported fields }
func (*CoreModel) AddValidationError ¶ added in v0.2.1
func (CoreModel) GetRootNode ¶ added in v0.2.1
func (c CoreModel) GetRootNode() *yaml.Node
func (*CoreModel) GetValidationErrors ¶ added in v0.2.1
func (*CoreModel) SetRootNode ¶ added in v0.2.1
func (c *CoreModel) SetRootNode(rootNode *yaml.Node)
type CoreModeler ¶ added in v0.2.1
type CoreSetter ¶ added in v0.2.1
type CoreSetter interface {
SetCoreValue(core any)
}
CoreSetter provides runtime access to set the core field
type ExtensionCoreMap ¶
type ExtensionMap ¶
type ExtensionSourceIterator ¶
type Model ¶ added in v0.2.1
type Model[T any] struct { // Valid indicates whether this model passed validation. Valid bool // contains filtered or unexported fields }
Model is a generic model that can be used to validate and marshal/unmarshal a model.
func (*Model[T]) GetCore ¶ added in v0.2.1
func (m *Model[T]) GetCore() *T
GetCore will return the low level representation of the model. Useful for accessing line and column numbers for various nodes in the backing yaml/json document.
func (*Model[T]) GetRootNode ¶ added in v0.2.1
func (m *Model[T]) GetRootNode() *yaml.Node
GetRootNode implements RootNodeAccessor interface by delegating to the core model.
This method provides access to the unique YAML node that was originally parsed for this model instance. The RootNode serves as a stable identity for the model that persists across array reorderings and other operations.
The method works by checking if the core model implements CoreModeler interface, which provides access to the RootNode. If the core doesn't implement CoreModeler, this returns nil, which causes the sync process to fall back to index-based matching.
This identity-based matching is crucial for preserving field ordering when high-level arrays are reordered, as it ensures each high-level model syncs with its correct corresponding core model rather than being matched by array position.
func (*Model[T]) SetCore ¶ added in v0.2.1
func (m *Model[T]) SetCore(core *T)
SetCore implements CoreAccessor interface
func (*Model[T]) SetCoreValue ¶ added in v0.2.1
SetCoreValue implements CoreSetter interface
type Node ¶
func (Node[V]) GetKeyNodeOrRoot ¶
func (n Node[V]) GetKeyNodeOrRoot(rootNode *yaml.Node) *yaml.Node
func (Node[V]) GetMapKeyNodeOrRoot ¶
Will return the key node for the map key, or the map root node or the provided root node if the node is not present
func (Node[V]) GetMapValueNodeOrRoot ¶
Will return the value node for the map key, or the map root node or the provided root node if the node is not present
func (Node[V]) GetNavigableNode ¶
func (Node[V]) GetSliceValueNodeOrRoot ¶
Will return the value node for the slice index, or the slice root node or the provided root node if the node is not present
func (Node[V]) GetValueNodeOrRoot ¶
func (n Node[V]) GetValueNodeOrRoot(rootNode *yaml.Node) *yaml.Node
func (Node[V]) GetValueType ¶
func (*Node[V]) SetPresent ¶
type NodeAccessor ¶
type NodeMutator ¶
type RootNodeAccessor ¶ added in v0.2.1
type RootNodeAccessor interface {
GetRootNode() *yaml.Node
}
RootNodeAccessor provides access to the RootNode of a model's core for identity matching.
This interface solves a critical problem in array/map synchronization: when high-level arrays are reordered (e.g., moving workflows around in an Arazzo document), we need to match each high-level element with its corresponding core model to preserve field ordering and other state.
Without identity matching, the sync process would match elements by array position:
Source[0] -> Target[0], Source[1] -> Target[1], etc.
This causes problems when arrays are reordered because the wrong data gets synced to the wrong core objects, disrupting field ordering within individual elements.
With RootNode identity matching, we can match elements correctly:
Source[workflow-A] -> Target[core-for-workflow-A] (regardless of position) Source[workflow-B] -> Target[core-for-workflow-B] (regardless of position)
The RootNode serves as a unique identity because it's the original YAML node that was parsed for each element, making it a stable identifier across reorderings.