util

package
v0.5.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 25, 2017 License: Apache-2.0 Imports: 7 Imported by: 0

Documentation

Overview

Package util implements utlity functions used in ygot.

Index

Constants

This section is empty.

Variables

View Source
var (
	// YangMaxNumber represents the maximum value for any integer type.
	YangMaxNumber = yang.Number{Kind: yang.MaxNumber}
	// YangMinNumber represents the minimum value for any integer type.
	YangMinNumber = yang.Number{Kind: yang.MinNumber}
)

Functions

func ChildSchema

func ChildSchema(schema *yang.Entry, path []string) *yang.Entry

ChildSchema returns the first child schema that matches path from the given schema root. When comparing the path, only nodes that appear in the data tree are considered. It returns nil if no node matches the path.

func DataSchemaTreesString

func DataSchemaTreesString(schema *yang.Entry, dataTree interface{}) string

DataSchemaTreesString outputs a combined data/schema tree string where schema is displayed alongside the data tree e.g.

[device (container)]
 RoutingPolicy [routing-policy (container)]
   DefinedSets [defined-sets (container)]
     PrefixSet [prefix-set (list)]
     prefix1
       prefix1
       {255.255.255.0/20 20..24}
         IpPrefix : "255.255.255.0/20" [ip-prefix (leaf)]
         MasklengthRange : "20..24" [masklength-range (leaf)]
       PrefixSetName : "prefix1" [prefix-set-name (leaf)]

func DbgErr

func DbgErr(err error) error

DbgErr DbgPrints err and returns it.

func DbgPrint

func DbgPrint(v ...interface{})

DbgPrint prints v if the package global variable debugLibrary is set. v has the same format as Printf. A trailing newline is added to the output.

func DbgSchema

func DbgSchema(v ...interface{})

DbgSchema prints v if the package global variable debugSchema is set. v has the same format as Printf.

func Dedent

func Dedent()

Dedent decreases DbgPrint Indent level.

func DeepEqualDerefPtrs

func DeepEqualDerefPtrs(a, b interface{}) bool

DeepEqualDerefPtrs compares the values of a and b. If either value is a ptr, it is dereferenced prior to the comparison.

func FieldSchema

func FieldSchema(schema *yang.Entry, f reflect.StructField) (*yang.Entry, error)

FieldSchema returns the schema for the struct field f, if f contains a valid path tag and the schema path is found in the schema tree. It returns an error if the struct tag is invalid, or nil if tag is valid but the schema is not found in the tree at the specified path.

func FindFirstNonChoiceOrCase

func FindFirstNonChoiceOrCase(e *yang.Entry) map[string]*yang.Entry

FindFirstNonChoiceOrCase recursively traverses the schema tree and returns a map with the set of the first nodes in every path that are neither case nor choice nodes. The keys in the map are the paths to the matching elements from the parent data struct, which always have length 1.

func GetNodes

func GetNodes(schema *yang.Entry, root interface{}, path *gpb.Path) ([]interface{}, []*yang.Entry, error)

GetNodes returns the nodes in the data tree at the indicated path, relative to the supplied root and their corresponding schemas at the same slice index. schema is the schema for root. If the key for a list node is missing, all values in the list are returned. If the key is partial, all nodes matching the values present in the key are returned. If the root is the tree root, the path may be absolute. GetNodes returns an error if the path is not found in the tree, or an element along the path is nil.

func Indent

func Indent()

Indent increases DbgPrint Indent level.

func InsertIntoMap

func InsertIntoMap(parentMap interface{}, key interface{}, value interface{}) error

InsertIntoMap inserts value with key into parent which must be a map.

func InsertIntoMapStructField

func InsertIntoMapStructField(parentStruct interface{}, fieldName string, key, fieldValue interface{}) error

InsertIntoMapStructField inserts fieldValue into a field of type map in parentStruct called fieldName (which must exist, but may be nil), using the given key. If the key already exists in the map, the corresponding value is updated.

func InsertIntoSlice

func InsertIntoSlice(parentSlice interface{}, value interface{}) error

InsertIntoSlice inserts value into parent which must be a slice ptr.

func InsertIntoSliceStructField

func InsertIntoSliceStructField(parentStruct interface{}, fieldName string, fieldValue interface{}) error

InsertIntoSliceStructField inserts fieldValue into a field of type slice in parentStruct called fieldName (which must exist, but may be nil).

func InsertIntoStruct

func InsertIntoStruct(parentStruct interface{}, fieldName string, fieldValue interface{}) error

InsertIntoStruct updates a field called fieldName (which must exist, but may be nil) in parentStruct, with value fieldValue. If the struct field type is a ptr and the value is non-ptr, the field is populated with the corresponding ptr type.

func IsChoiceOrCase

func IsChoiceOrCase(e *yang.Entry) bool

IsChoiceOrCase returns true if the entry is either a 'case' or a 'choice' node within the schema. These are schema nodes only, and the code generation operates on data tree paths.

func IsFakeRoot

func IsFakeRoot(e *yang.Entry) bool

IsFakeRoot reports whether the supplied yang.Entry represents the synthesised root entity in the generated code.

func IsLeafRef

func IsLeafRef(schema *yang.Entry) bool

IsLeafRef reports whether schema is a leafref schema node type.

func IsNilOrInvalidValue

func IsNilOrInvalidValue(v reflect.Value) bool

IsNilOrInvalidValue reports whether v is nil or reflect.Zero.

func IsStructValueWithNFields

func IsStructValueWithNFields(v reflect.Value, n int) bool

IsStructValueWithNFields returns true if the reflect.Value representing a struct v has n fields.

func IsTypeInterface

func IsTypeInterface(t reflect.Type) bool

IsTypeInterface reports whether v is an interface.

func IsTypeMap

func IsTypeMap(t reflect.Type) bool

IsTypeMap reports whether v is a map type.

func IsTypeSlice

func IsTypeSlice(t reflect.Type) bool

IsTypeSlice reports whether v is a slice type.

func IsTypeSliceOfInterface

func IsTypeSliceOfInterface(t reflect.Type) bool

IsTypeSliceOfInterface reports whether v is a slice of interface.

func IsTypeSlicePtr

func IsTypeSlicePtr(t reflect.Type) bool

IsTypeSlicePtr reports whether v is a slice ptr type.

func IsTypeStruct

func IsTypeStruct(t reflect.Type) bool

IsTypeStruct reports whether t is a struct type.

func IsTypeStructPtr

func IsTypeStructPtr(t reflect.Type) bool

IsTypeStructPtr reports whether v is a struct ptr type.

func IsUnkeyedList

func IsUnkeyedList(e *yang.Entry) bool

IsUnkeyedList reports whether e is an unkeyed list.

func IsValueInterface

func IsValueInterface(v reflect.Value) bool

IsValueInterface reports whether v is an interface type.

func IsValueInterfaceToStructPtr

func IsValueInterfaceToStructPtr(v reflect.Value) bool

IsInterfaceToStructPtr reports whether v is an interface that contains a pointer to a struct.

func IsValueMap

func IsValueMap(v reflect.Value) bool

IsValueMap reports whether v is a map type.

func IsValueNil

func IsValueNil(value interface{}) bool

IsValueNil returns true if either value is nil, or has dynamic type {ptr, map, slice} with value nil.

func IsValueNilOrDefault

func IsValueNilOrDefault(value interface{}) bool

IsValueNilOrDefault returns true if either IsValueNil(value) or the default value for the type.

func IsValuePtr

func IsValuePtr(v reflect.Value) bool

IsValuePtr reports whether v is a ptr type.

func IsValueScalar

func IsValueScalar(v reflect.Value) bool

IsValueScalar reports whether v is a scalar type.

func IsValueSlice

func IsValueSlice(v reflect.Value) bool

IsValueSlice reports whether v is a slice type.

func IsValueStruct

func IsValueStruct(v reflect.Value) bool

IsValueStruct reports whether v is a struct type.

func IsValueStructPtr

func IsValueStructPtr(v reflect.Value) bool

IsValueStructPtr reports whether v is a struct ptr type.

func MatchingNonChoiceCaseSchema

func MatchingNonChoiceCaseSchema(schema *yang.Entry, path []string) *yang.Entry

MatchingNonChoiceCaseSchema returns the child schema at the given path from schema if one is found, or nil otherwise.

func ResetIndent

func ResetIndent()

ResetIndent sets the indent level to zero.

func ResolveIfLeafRef

func ResolveIfLeafRef(schema *yang.Entry) (*yang.Entry, error)

ResolveIfLeafRef returns a ptr to the schema pointed to by the leaf-ref path in schema if it's a leafref, or schema itself if it's not.

func SchemaPaths

func SchemaPaths(f reflect.StructField) ([][]string, error)

SchemaPaths returns all the paths in the path tag.

func SchemaTreeString

func SchemaTreeString(schema *yang.Entry, prefix string) string

SchemaTreeString returns the schema hierarchy tree as a string with node names and types only e.g. clock (container)

timezone (choice)
  timezone-name (case)
    timezone-name (leaf)
  timezone-utc-offset (case)
    timezone-utc-offset (leaf)

func SchemaTypeStr

func SchemaTypeStr(schema *yang.Entry) string

SchemaTypeStr returns a string representation of the type of element schema represents e.g. "container", "choice" etc.

func StripModulePrefix

func StripModulePrefix(s string) string

StripModulePrefix returns s with any prefix up to and including the last ':' character removed.

func StripModulePrefixes

func StripModulePrefixes(in []string) []string

StripModulePrefixes returns "in" with each element with the format "A:B" changed to "B".

func StripModulePrefixesStr

func StripModulePrefixesStr(in string) string

StripModulePrefixesStr returns "in" with each element with the format "A:B" changed to "B".

func ToString

func ToString(errors []error) string

ToString returns a string representation of errors. Any nil errors in the slice are skipped.

func UpdateField

func UpdateField(parentStruct interface{}, fieldName string, fieldValue interface{}) error

UpdateField updates a field called fieldName (which must exist, but may be nil) in parentStruct, with value fieldValue. If the field is a slice, fieldValue is appended.

func ValueStr

func ValueStr(value interface{}) string

ValueStr returns a string representation of value which may be a value, ptr, or struct type.

func YangTypeToDebugString

func YangTypeToDebugString(yt *yang.YangType) string

YangTypeToDebugString returns a debug string representation of a YangType.

Types

type Errors

type Errors []error

Errors is a slice of error.

func AppendErr

func AppendErr(errors []error, err error) Errors

AppendErr appends err to errors if it is not nil and returns the result. If err is nil, it is not appended.

func AppendErrs

func AppendErrs(errors []error, newErrs []error) Errors

AppendErrs appends newErrs to errors and returns the result. If newErrs is empty, nothing is appended.

func ForEachField

func ForEachField(schema *yang.Entry, value interface{}, in, out interface{}, iterFunction FieldIteratorFunc) (errs Errors)

ForEachField recursively iterates through the fields of value (which may be any Go type) and executes iterFunction on each field. Any nil fields (including value) are traversed in the schema tree only. This is done to support iterations that need to detect the absence of some data item e.g. leafref.

schema is the schema corresponding to value.
in, out are passed to the iterator function and can be used to carry state
  and return results from the iterator.
iterFunction is executed on each scalar field.

It returns a slice of errors encountered while processing the struct.

func NewErrs

func NewErrs(err error) Errors

NewErrs returns a slice of error with a single element err. If err is nil, returns nil.

func (Errors) Error

func (e Errors) Error() string

Error implements the error#Error method.

func (Errors) String

func (e Errors) String() string

String implements the stringer#String method.

type FieldIteratorFunc

type FieldIteratorFunc func(ni *NodeInfo, in, out interface{}) Errors

FieldIteratorFunc is an iteration function for arbitrary field traversals. in, out are passed through from the caller to the iteration vistior function and can be used to pass state in and out. They are not otherwise touched. It returns a slice of errors encountered while processing the field.

type NodeInfo

type NodeInfo struct {
	// Schema is the schema for the node.
	Schema *yang.Entry
	// Path is the relative path from the parent to the current schema node.
	PathFromParent []string
	// Parent is a ptr to the containing node.
	Parent *NodeInfo
	// StructField is the StructField for the field being traversed.
	StructField reflect.StructField
	// FieldValue is the Value for the field being traversed.
	FieldValue reflect.Value
	// FieldKeys is the slice of keys in the map being traversed. nil if type
	// being traversed is not a map.
	FieldKeys []reflect.Value
	// FieldKey is the key of the map element being traversed. ValueOf(nil) if
	// type being traversed is not a map.
	FieldKey reflect.Value
}

NodeInfo describes a node in a tree being traversed. It is passed to the iterator function supplied to a traversal driver function like ForEachField.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL