Documentation

Index

Constants

View Source
const (
	// MergeStrategy is the strategy to merge the local and remote values
	MergeStrategy = "merge"

	// RetainKeysStrategy is the strategy to merge the local and remote values, but drop any fields not defined locally
	RetainKeysStrategy = "retainKeys"

	// ReplaceStrategy is the strategy to replace the remote value with the local value
	ReplaceStrategy = "replace"
)

Variables

This section is empty.

Functions

func IsAdd

func IsAdd(e Element) bool

    IsAdd returns true if the field represented by e should have the local value directly added to the merged object instead of merging the recorded, local and remote values

    func IsDrop

    func IsDrop(e Element) bool

      IsDrop returns true if the field represented by e should be dropped from the merged object

      Types

      type CombinedMapSlice

      type CombinedMapSlice struct {
      	Items []*ListItem
      }

        CombinedMapSlice is a slice of maps or types with merge keys

        func (*CombinedMapSlice) UpsertLocal

        func (s *CombinedMapSlice) UpsertLocal(key MergeKeys, l interface{}) error

          UpsertLocal adds l to the slice. If there is already a value of l sharing l's merge key in the slice for either the recorded or remote, set l the local value Otherwise append a new item to the list with the local value.

          func (*CombinedMapSlice) UpsertRecorded

          func (s *CombinedMapSlice) UpsertRecorded(key MergeKeys, l interface{}) error

            UpsertRecorded adds l to the slice. If there is already a value of l sharing l's merge key in the slice for either the local or remote, set l the recorded value Otherwise append a new item to the list with the recorded value.

            func (*CombinedMapSlice) UpsertRemote

            func (s *CombinedMapSlice) UpsertRemote(key MergeKeys, l interface{}) error

              UpsertRemote adds l to the slice. If there is already a value of l sharing l's merge key in the slice for either the recorded or local, set l the remote value Otherwise append a new item to the list with the remote value.

              type CombinedPrimitiveSlice

              type CombinedPrimitiveSlice struct {
              	Items []*PrimitiveListItem
              }

                CombinedPrimitiveSlice implements a slice of primitives

                func (*CombinedPrimitiveSlice) UpsertLocal

                func (s *CombinedPrimitiveSlice) UpsertLocal(l interface{})

                  UpsertLocal adds l to the slice. If there is already a value of l in the slice for either the recorded or remote, set on that value as the local value Otherwise append a new item to the list with the local value.

                  func (*CombinedPrimitiveSlice) UpsertRecorded

                  func (s *CombinedPrimitiveSlice) UpsertRecorded(l interface{})

                    UpsertRecorded adds l to the slice. If there is already a value of l in the slice for either the local or remote, set on that value as the recorded value Otherwise append a new item to the list with the recorded value.

                    func (*CombinedPrimitiveSlice) UpsertRemote

                    func (s *CombinedPrimitiveSlice) UpsertRemote(l interface{})

                      UpsertRemote adds l to the slice. If there is already a value of l in the slice for either the local or recorded, set on that value as the remote value Otherwise append a new item to the list with the remote value.

                      type ConflictDetector

                      type ConflictDetector interface {
                      	HasConflict() error
                      }

                        ConflictDetector defines the capability to detect conflict. An element can examine remote/recorded value to detect conflict.

                        type ConflictError

                        type ConflictError struct {
                        	// contains filtered or unexported fields
                        }

                          ConflictError represents a conflict error occurred during the merge operation.

                          func NewConflictError

                          func NewConflictError(e PrimitiveElement) *ConflictError

                            NewConflictError returns a ConflictError with detailed conflict information in element

                            func (*ConflictError) Error

                            func (c *ConflictError) Error() string

                              Error implements error

                              type Element

                              type Element interface {
                              	// FieldMeta specifies which merge strategy to use for this element
                              	FieldMeta
                              
                              	// Merge merges the recorded, local and remote values in the element using the Strategy
                              	// provided as an argument.  Calls the type specific method on the Strategy - following the
                              	// "Accept" method from the "Visitor" pattern.
                              	// e.g. Merge on a ListElement will call Strategy.MergeList(self)
                              	// Returns the Result of the merged elements
                              	Merge(Strategy) (Result, error)
                              
                              	// HasRecorded returns true if the field was explicitly
                              	// present in the recorded source.  This is to differentiate between
                              	// undefined and set to null
                              	HasRecorded() bool
                              
                              	// GetRecorded returns the field value from the recorded source of the object
                              	GetRecorded() interface{}
                              
                              	// HasLocal returns true if the field was explicitly
                              	// present in the local source.  This is to differentiate between
                              	// undefined and set to null
                              	HasLocal() bool
                              
                              	// GetLocal returns the field value from the local source of the object
                              	GetLocal() interface{}
                              
                              	// HasRemote returns true if the field was explicitly
                              	// present in the remote source.  This is to differentiate between
                              	// undefined and set to null
                              	HasRemote() bool
                              
                              	// GetRemote returns the field value from the remote source of the object
                              	GetRemote() interface{}
                              }

                                Element contains the record, local, and remote value for a field in an object and metadata about the field read from openapi. Calling Merge on an element will apply the passed in strategy to Element - e.g. either replacing the whole element with the local copy or merging each of the recorded, local and remote fields of the element.

                                type EmptyElement

                                type EmptyElement struct {
                                	// FieldMetaImpl contains metadata about the field from openapi
                                	FieldMetaImpl
                                }

                                  EmptyElement is a placeholder for when no value is set for a field so its type is unknown

                                  func (EmptyElement) GetLocal

                                  func (e EmptyElement) GetLocal() interface{}

                                    GetLocal implements Element.GetLocal

                                    func (EmptyElement) GetRecorded

                                    func (e EmptyElement) GetRecorded() interface{}

                                      GetRecorded implements Element.GetRecorded

                                      func (EmptyElement) GetRemote

                                      func (e EmptyElement) GetRemote() interface{}

                                        GetRemote implements Element.GetRemote

                                        func (EmptyElement) HasLocal

                                        func (e EmptyElement) HasLocal() bool

                                          HasLocal implements Element.HasLocal

                                          func (EmptyElement) HasRecorded

                                          func (e EmptyElement) HasRecorded() bool

                                            HasRecorded implements Element.HasRecorded

                                            func (EmptyElement) HasRemote

                                            func (e EmptyElement) HasRemote() bool

                                              HasRemote implements Element.IsAdd

                                              func (EmptyElement) IsAdd

                                              func (e EmptyElement) IsAdd() bool

                                                IsAdd implements Element.IsAdd

                                                func (EmptyElement) IsDelete

                                                func (e EmptyElement) IsDelete() bool

                                                  IsDelete implements Element.IsDelete

                                                  func (EmptyElement) Merge

                                                  func (e EmptyElement) Merge(v Strategy) (Result, error)

                                                    Merge implements Element.Merge

                                                    type FieldMeta

                                                    type FieldMeta interface {
                                                    	// GetFieldMergeType returns the type of merge strategy to use for this field
                                                    	// maybe "merge", "replace" or "retainkeys"
                                                    	// TODO: There maybe multiple strategies, so this may need to be a slice, map, or struct
                                                    	// Address this in a follow up in the PR to introduce retainkeys strategy
                                                    	GetFieldMergeType() string
                                                    
                                                    	// GetFieldMergeKeys returns the merge key to use when the MergeType is "merge" and underlying type is a list
                                                    	GetFieldMergeKeys() MergeKeys
                                                    
                                                    	// GetFieldType returns the openapi field type - e.g. primitive, array, map, type, reference
                                                    	GetFieldType() string
                                                    }

                                                      FieldMeta defines the strategy used to apply a Patch for an element

                                                      type FieldMetaImpl

                                                      type FieldMetaImpl struct {
                                                      	// MergeType is the type of merge strategy to use for this field
                                                      	// maybe "merge", "replace" or "retainkeys"
                                                      	MergeType string
                                                      
                                                      	// MergeKeys are the merge keys to use when the MergeType is "merge" and underlying type is a list
                                                      	MergeKeys MergeKeys
                                                      
                                                      	// Type is the openapi type of the field - "list", "primitive", "map"
                                                      	Type string
                                                      
                                                      	// Name contains name of the field
                                                      	Name string
                                                      }

                                                        FieldMetaImpl implements FieldMeta

                                                        func (FieldMetaImpl) GetFieldMergeKeys

                                                        func (s FieldMetaImpl) GetFieldMergeKeys() MergeKeys

                                                          GetFieldMergeKeys implements FieldMeta.GetFieldMergeKeys

                                                          func (FieldMetaImpl) GetFieldMergeType

                                                          func (s FieldMetaImpl) GetFieldMergeType() string

                                                            GetFieldMergeType implements FieldMeta.GetFieldMergeType

                                                            func (FieldMetaImpl) GetFieldType

                                                            func (s FieldMetaImpl) GetFieldType() string

                                                              GetFieldType implements FieldMeta.GetFieldType

                                                              type HasElementData

                                                              type HasElementData struct {
                                                              	// contains filtered or unexported fields
                                                              }

                                                                HasElementData contains whether a field was set in the recorded, local and remote sources

                                                                func (HasElementData) HasLocal

                                                                func (e HasElementData) HasLocal() bool

                                                                  HasLocal implements Element.HasLocal

                                                                  func (HasElementData) HasRecorded

                                                                  func (e HasElementData) HasRecorded() bool

                                                                    HasRecorded implements Element.HasRecorded

                                                                    func (HasElementData) HasRemote

                                                                    func (e HasElementData) HasRemote() bool

                                                                      HasRemote implements Element.HasRemote

                                                                      type ListElement

                                                                      type ListElement struct {
                                                                      	// FieldMetaImpl contains metadata about the field from openapi
                                                                      	FieldMetaImpl
                                                                      
                                                                      	ListElementData
                                                                      
                                                                      	// Values contains the combined recorded-local-remote value of each item in the list
                                                                      	// Present for lists that can be merged only.  Contains the items
                                                                      	// from each of the 3 lists merged into single Elements using
                                                                      	// the merge-key.
                                                                      	Values []Element
                                                                      }

                                                                        ListElement contains the recorded, local and remote values for a field of type list

                                                                        func (ListElement) HasConflict

                                                                        func (e ListElement) HasConflict() error

                                                                          HasConflict returns ConflictError if fields in recorded and remote of ListElement conflict

                                                                          func (ListElement) Merge

                                                                          func (e ListElement) Merge(v Strategy) (Result, error)

                                                                            Merge implements Element.Merge

                                                                            type ListElementData

                                                                            type ListElementData struct {
                                                                            	RawElementData
                                                                            }

                                                                              ListElementData contains the recorded, local and remote data for a list

                                                                              func (ListElementData) GetLocalList

                                                                              func (e ListElementData) GetLocalList() []interface{}

                                                                                GetLocalList returns the Local value as a list

                                                                                func (ListElementData) GetRecordedList

                                                                                func (e ListElementData) GetRecordedList() []interface{}

                                                                                  GetRecordedList returns the Recorded value as a list

                                                                                  func (ListElementData) GetRemoteList

                                                                                  func (e ListElementData) GetRemoteList() []interface{}

                                                                                    GetRemoteList returns the Remote value as a list

                                                                                    type ListItem

                                                                                    type ListItem struct {
                                                                                    	// KeyValue is the merge key value of the item
                                                                                    	KeyValue MergeKeyValue
                                                                                    
                                                                                    	// RawElementData contains the field values
                                                                                    	RawElementData
                                                                                    }

                                                                                      ListItem represents a single value in a slice of maps or types

                                                                                      type MapElement

                                                                                      type MapElement struct {
                                                                                      	// FieldMetaImpl contains metadata about the field from openapi
                                                                                      	FieldMetaImpl
                                                                                      
                                                                                      	// MapElementData contains the value a field was set to
                                                                                      	MapElementData
                                                                                      
                                                                                      	// Values contains the combined recorded-local-remote value of each item in the map
                                                                                      	// Values contains the values in mapElement.  Element must contain
                                                                                      	// a Name matching its key in Values
                                                                                      	Values map[string]Element
                                                                                      }

                                                                                        MapElement contains the recorded, local and remote values for a field of type map

                                                                                        func (MapElement) GetValues

                                                                                        func (e MapElement) GetValues() map[string]Element

                                                                                          GetValues implements Element.GetValues

                                                                                          func (MapElement) HasConflict

                                                                                          func (e MapElement) HasConflict() error

                                                                                            HasConflict returns ConflictError if some elements in map conflict.

                                                                                            func (MapElement) Merge

                                                                                            func (e MapElement) Merge(v Strategy) (Result, error)

                                                                                              Merge implements Element.Merge

                                                                                              type MapElementData

                                                                                              type MapElementData struct {
                                                                                              	RawElementData
                                                                                              }

                                                                                                MapElementData contains the recorded, local and remote data for a map or type

                                                                                                func (MapElementData) GetLocalMap

                                                                                                func (e MapElementData) GetLocalMap() map[string]interface{}

                                                                                                  GetLocalMap returns the Local value as a map

                                                                                                  func (MapElementData) GetRecordedMap

                                                                                                  func (e MapElementData) GetRecordedMap() map[string]interface{}

                                                                                                    GetRecordedMap returns the Recorded value as a map

                                                                                                    func (MapElementData) GetRemoteMap

                                                                                                    func (e MapElementData) GetRemoteMap() map[string]interface{}

                                                                                                      GetRemoteMap returns the Remote value as a map

                                                                                                      type MergeKeyValue

                                                                                                      type MergeKeyValue map[string]string

                                                                                                        MergeKeyValue records the value of the mergekey for an item in a list

                                                                                                        func (MergeKeyValue) Equal

                                                                                                        func (v MergeKeyValue) Equal(o MergeKeyValue) bool

                                                                                                          Equal returns true if the MergeKeyValues share the same value, representing the same item in a list

                                                                                                          type MergeKeys

                                                                                                          type MergeKeys []string

                                                                                                            MergeKeys is the set of fields on an object that uniquely identify and is used when merging lists to identify the "same" object independent of the ordering of the objects

                                                                                                            func (MergeKeys) GetMergeKeyValue

                                                                                                            func (mk MergeKeys) GetMergeKeyValue(i interface{}) (MergeKeyValue, error)

                                                                                                              GetMergeKeyValue parses the MergeKeyValue from an item in a list

                                                                                                              type Operation

                                                                                                              type Operation int

                                                                                                                Operation records whether a field should be set or dropped

                                                                                                                const (
                                                                                                                	// ERROR is an error during merge
                                                                                                                	ERROR Operation = iota
                                                                                                                	// SET sets the field on an object
                                                                                                                	SET
                                                                                                                	// DROP drops the field from an object
                                                                                                                	DROP
                                                                                                                )

                                                                                                                type PrimitiveElement

                                                                                                                type PrimitiveElement struct {
                                                                                                                	// FieldMetaImpl contains metadata about the field from openapi
                                                                                                                	FieldMetaImpl
                                                                                                                
                                                                                                                	// RawElementData contains the values the field was set to
                                                                                                                	RawElementData
                                                                                                                }

                                                                                                                  PrimitiveElement contains the recorded, local and remote values for a field of type primitive

                                                                                                                  func (PrimitiveElement) HasConflict

                                                                                                                  func (e PrimitiveElement) HasConflict() error

                                                                                                                    HasConflict returns ConflictError if primitive element has conflict field. Conflicts happen when either of the following conditions: 1. A field is specified in both recorded and remote values, but does not match. 2. A field is specified in recorded values, but missing in remote values.

                                                                                                                    func (PrimitiveElement) Merge

                                                                                                                    func (e PrimitiveElement) Merge(v Strategy) (Result, error)

                                                                                                                      Merge implements Element.Merge

                                                                                                                      type PrimitiveListItem

                                                                                                                      type PrimitiveListItem struct {
                                                                                                                      	// Value is the value of the primitive, should match recorded, local and remote
                                                                                                                      	Value interface{}
                                                                                                                      
                                                                                                                      	RawElementData
                                                                                                                      }

                                                                                                                        PrimitiveListItem represents a single value in a slice of primitives

                                                                                                                        type RawElementData

                                                                                                                        type RawElementData struct {
                                                                                                                        	HasElementData
                                                                                                                        	// contains filtered or unexported fields
                                                                                                                        }

                                                                                                                          RawElementData contains the raw recorded, local and remote data and metadata about whethere or not each was set

                                                                                                                          func NewRawElementData

                                                                                                                          func NewRawElementData(recorded, local, remote interface{}) RawElementData

                                                                                                                            NewRawElementData returns a new RawElementData, setting IsSet to true for non-nil values, and leaving IsSet false for nil values. Note: use this only when you want a nil-value to be considered "unspecified" (ignore) and not "unset" (deleted).

                                                                                                                            func (RawElementData) GetLocal

                                                                                                                            func (b RawElementData) GetLocal() interface{}

                                                                                                                              GetLocal implements Element.GetLocal

                                                                                                                              func (RawElementData) GetRecorded

                                                                                                                              func (b RawElementData) GetRecorded() interface{}

                                                                                                                                GetRecorded implements Element.GetRecorded

                                                                                                                                func (RawElementData) GetRemote

                                                                                                                                func (b RawElementData) GetRemote() interface{}

                                                                                                                                  GetRemote implements Element.GetRemote

                                                                                                                                  func (*RawElementData) SetLocal

                                                                                                                                  func (b *RawElementData) SetLocal(value interface{})

                                                                                                                                    SetLocal sets the local value

                                                                                                                                    func (*RawElementData) SetRecorded

                                                                                                                                    func (b *RawElementData) SetRecorded(value interface{})

                                                                                                                                      SetRecorded sets the recorded value

                                                                                                                                      func (*RawElementData) SetRemote

                                                                                                                                      func (b *RawElementData) SetRemote(value interface{})

                                                                                                                                        SetRemote sets the remote value

                                                                                                                                        type Result

                                                                                                                                        type Result struct {
                                                                                                                                        	// Operation is the operation that should be performed for the merged field
                                                                                                                                        	Operation Operation
                                                                                                                                        	// MergedResult is the new merged value
                                                                                                                                        	MergedResult interface{}
                                                                                                                                        }

                                                                                                                                          Result is the result of merging fields

                                                                                                                                          type Strategy

                                                                                                                                          type Strategy interface {
                                                                                                                                          	// MergeList is invoked by ListElements when Merge is called
                                                                                                                                          	MergeList(ListElement) (Result, error)
                                                                                                                                          
                                                                                                                                          	// MergeMap is invoked by MapElements when Merge is called
                                                                                                                                          	MergeMap(MapElement) (Result, error)
                                                                                                                                          
                                                                                                                                          	// MergeType is invoked by TypeElements when Merge is called
                                                                                                                                          	MergeType(TypeElement) (Result, error)
                                                                                                                                          
                                                                                                                                          	// MergePrimitive is invoked by PrimitiveElements when Merge is called
                                                                                                                                          	MergePrimitive(PrimitiveElement) (Result, error)
                                                                                                                                          
                                                                                                                                          	// MergeEmpty is invoked by EmptyElements when Merge is called
                                                                                                                                          	MergeEmpty(EmptyElement) (Result, error)
                                                                                                                                          }

                                                                                                                                            Strategy implements a strategy for merging recorded, local and remote values contained in an element and returns the merged result. Follows the visitor pattern

                                                                                                                                            type TypeElement

                                                                                                                                            type TypeElement struct {
                                                                                                                                            	// FieldMetaImpl contains metadata about the field from openapi
                                                                                                                                            	FieldMetaImpl
                                                                                                                                            
                                                                                                                                            	MapElementData
                                                                                                                                            
                                                                                                                                            	// Values contains the combined recorded-local-remote value of each field in the type
                                                                                                                                            	// Values contains the values in mapElement.  Element must contain
                                                                                                                                            	// a Name matching its key in Values
                                                                                                                                            	Values map[string]Element
                                                                                                                                            }

                                                                                                                                              TypeElement contains the recorded, local and remote values for a field that is a complex type

                                                                                                                                              func (TypeElement) GetValues

                                                                                                                                              func (e TypeElement) GetValues() map[string]Element

                                                                                                                                                GetValues implements Element.GetValues

                                                                                                                                                func (TypeElement) HasConflict

                                                                                                                                                func (e TypeElement) HasConflict() error

                                                                                                                                                  HasConflict returns ConflictError if some elements in type conflict.

                                                                                                                                                  func (TypeElement) Merge

                                                                                                                                                  func (e TypeElement) Merge(v Strategy) (Result, error)

                                                                                                                                                    Merge implements Element.Merge

                                                                                                                                                    Directories

                                                                                                                                                    Path Synopsis