// Code generated by xgen. But it has been edited!  see EDIT comments for what was changed and why.

package schema

import _ "embed"

//go:embed Opc.Ua.NodeSet2.xml
var OpcUaNodeSet2 []byte

// UANodeSet ...
type UANodeSet struct {
	LastModifiedAttr string             `xml:"LastModified,attr,omitempty"`
	NamespaceUris    *UriTable          `xml:"NamespaceUris"`
	ServerUris       *UriTable          `xml:"ServerUris"`
	Models           *ModelTable        `xml:"Models"`
	Aliases          *AliasTable        `xml:"Aliases"`
	Extensions       *ListOfExtensions  `xml:"Extensions"`
	UAObject         []*UAObject        `xml:"UAObject"`
	UAVariable       []*UAVariable      `xml:"UAVariable"`
	UAMethod         []*UAMethod        `xml:"UAMethod"`
	UAView           []*UAView          `xml:"UAView"`
	UAObjectType     []*UAObjectType    `xml:"UAObjectType"`
	UAVariableType   []*UAVariableType  `xml:"UAVariableType"`
	UADataType       []*UADataType      `xml:"UADataType"`
	UAReferenceType  []*UAReferenceType `xml:"UAReferenceType"`
}

// UANodeSetChanges ...
type UANodeSetChanges struct {
	LastModifiedAttr       string              `xml:"LastModified,attr,omitempty"`
	TransactionIdAttr      string              `xml:"TransactionId,attr"`
	AcceptAllOrNothingAttr bool                `xml:"AcceptAllOrNothing,attr,omitempty"`
	NamespaceUris          *UriTable           `xml:"NamespaceUris"`
	ServerUris             *UriTable           `xml:"ServerUris"`
	Aliases                *AliasTable         `xml:"Aliases"`
	Extensions             *ListOfExtensions   `xml:"Extensions"`
	NodesToAdd             *NodesToAdd         `xml:"NodesToAdd"`
	ReferencesToAdd        *ReferencesToChange `xml:"ReferencesToAdd"`
	NodesToDelete          *NodesToDelete      `xml:"NodesToDelete"`
	ReferencesToDelete     *ReferencesToChange `xml:"ReferencesToDelete"`
}

// UANodeSetChangesStatus ...
type UANodeSetChangesStatus struct {
	LastModifiedAttr   string             `xml:"LastModified,attr,omitempty"`
	TransactionIdAttr  string             `xml:"TransactionId,attr"`
	NodesToAdd         *NodeSetStatusList `xml:"NodesToAdd"`
	ReferencesToAdd    *NodeSetStatusList `xml:"ReferencesToAdd"`
	NodesToDelete      *NodeSetStatusList `xml:"NodesToDelete"`
	ReferencesToDelete *NodeSetStatusList `xml:"ReferencesToDelete"`
}

// NodesToAdd ...
type NodesToAdd struct {
	UAObject        []*UAObject        `xml:"UAObject"`
	UAVariable      []*UAVariable      `xml:"UAVariable"`
	UAMethod        []*UAMethod        `xml:"UAMethod"`
	UAView          []*UAView          `xml:"UAView"`
	UAObjectType    []*UAObjectType    `xml:"UAObjectType"`
	UAVariableType  []*UAVariableType  `xml:"UAVariableType"`
	UADataType      []*UADataType      `xml:"UADataType"`
	UAReferenceType []*UAReferenceType `xml:"UAReferenceType"`
}

// NodesToDelete ...
type NodesToDelete struct {
	Node []*NodeToDelete `xml:"Node"`
}

// NodeToDelete ...
type NodeToDelete struct {
	DeleteReverseReferencesAttr bool `xml:"DeleteReverseReferences,attr,omitempty"`
	*NodeId
}

// ReferencesToChange ...
type ReferencesToChange struct {
	Reference []*ReferenceChange `xml:"Reference"`
}

// ReferenceChange ...
type ReferenceChange struct {
	SourceAttr        string `xml:"Source,attr"`
	ReferenceTypeAttr string `xml:"ReferenceType,attr"`
	IsForwardAttr     *bool  `xml:"IsForward,attr,omitempty"` // EDIT: this was changed from a bool to a *bool because the default value if this attribute isn't present is true
	*NodeId
}

// NodeSetStatus ...
type NodeSetStatus struct {
	CodeAttr uint32 `xml:"Code,attr,omitempty"`
	Value    string `xml:",chardata"`
}

// NodeSetStatusList ...
type NodeSetStatusList struct {
	Status []*NodeSetStatus `xml:"Status"`
}

// UriTable ...
type UriTable struct {
	Uri []string `xml:"Uri"`
}

// ModelTableEntry ...
type ModelTableEntry struct {
	ModelUriAttr           string                 `xml:"ModelUri,attr"`
	XmlSchemaUriAttr       string                 `xml:"XmlSchemaUri,attr,omitempty"`
	VersionAttr            string                 `xml:"Version,attr,omitempty"`
	PublicationDateAttr    string                 `xml:"PublicationDate,attr,omitempty"`
	AccessRestrictionsAttr uint16                 `xml:"AccessRestrictions,attr,omitempty"`
	RolePermissions        *ListOfRolePermissions `xml:"RolePermissions"`
	RequiredModel          []*ModelTableEntry     `xml:"RequiredModel"`
}

// ModelTable ...
type ModelTable struct {
	Model []*ModelTableEntry `xml:"Model"`
}

// NodeId ...
type NodeId string

// QualifiedName ...
type QualifiedName string

// NodeIdAlias ...
type NodeIdAlias struct {
	AliasAttr string `xml:"Alias,attr"`
	Value     string `xml:",chardata"`
}

// AliasTable ...
type AliasTable struct {
	Alias []*NodeIdAlias `xml:"Alias"`
}

// Locale ...
type Locale string

// LocalizedText ...
type LocalizedText struct {
	LocaleAttr string `xml:"Locale,attr,omitempty"`
	Value      string `xml:",chardata"`
}

// WriteMask ...
type WriteMask uint32

// EventNotifier ...
type EventNotifier uint8

// ValueRank ...
type ValueRank int

// AccessRestriction ...
type AccessRestriction uint16

// ArrayDimensions ...
type ArrayDimensions string

// SymbolicName ...
type SymbolicName string

// Duration ...
type Duration float64

// AccessLevel ...
type AccessLevel uint32

// Reference ...
type Reference struct {
	ReferenceTypeAttr string `xml:"ReferenceType,attr"`
	IsForwardAttr     *bool  `xml:"IsForward,attr,omitempty"` // EDIT: this was changed from a bool to a *bool because the default value if this attribute isn't present is true
	Value             string `xml:",chardata"`
}

// ListOfReferences ...
type ListOfReferences struct {
	Reference []*Reference `xml:"Reference"`
}

// RolePermission ...
type RolePermission struct {
	PermissionsAttr uint32 `xml:"Permissions,attr,omitempty"`
	Value           string `xml:",chardata"`
}

// ListOfRolePermissions ...
type ListOfRolePermissions struct {
	RolePermission []*RolePermission `xml:"RolePermission"`
}

// Extension ...
type Extension struct {
}

// ListOfExtensions ...
type ListOfExtensions struct {
	Extension []*Extension `xml:"Extension"`
}

// ReleaseStatus ...
type ReleaseStatus string

// UANode ...
type UANode struct {
	NodeIdAttr             string                 `xml:"NodeId,attr"`
	BrowseNameAttr         string                 `xml:"BrowseName,attr"`
	WriteMaskAttr          uint32                 `xml:"WriteMask,attr,omitempty"`
	UserWriteMaskAttr      uint32                 `xml:"UserWriteMask,attr,omitempty"`
	AccessRestrictionsAttr uint16                 `xml:"AccessRestrictions,attr,omitempty"`
	HasNoPermissionsAttr   bool                   `xml:"HasNoPermissions,attr,omitempty"`
	SymbolicNameAttr       string                 `xml:"SymbolicName,attr,omitempty"`
	ReleaseStatusAttr      string                 `xml:"ReleaseStatus,attr,omitempty"`
	DisplayName            []*LocalizedText       `xml:"DisplayName"`
	Description            []*LocalizedText       `xml:"Description"`
	Category               []string               `xml:"Category"`
	Documentation          string                 `xml:"Documentation"`
	References             *ListOfReferences      `xml:"References"`
	RolePermissions        *ListOfRolePermissions `xml:"RolePermissions"`
	Extensions             *ListOfExtensions      `xml:"Extensions"`
}

// UAInstance ...
type UAInstance struct {
	ParentNodeIdAttr string `xml:"ParentNodeId,attr,omitempty"`
	*UANode
}

// UAObject ...
type UAObject struct {
	EventNotifierAttr uint8 `xml:"EventNotifier,attr,omitempty"`
	*UAInstance
}

// Value ...
type Value struct {
}

// UAVariable ...
type UAVariable struct {
	DataTypeAttr                string             `xml:"DataType,attr,omitempty"`
	ValueRankAttr               int                `xml:"ValueRank,attr,omitempty"`
	ArrayDimensionsAttr         string             `xml:"ArrayDimensions,attr,omitempty"`
	AccessLevelAttr             uint32             `xml:"AccessLevel,attr,omitempty"`
	UserAccessLevelAttr         uint32             `xml:"UserAccessLevel,attr,omitempty"`
	MinimumSamplingIntervalAttr float64            `xml:"MinimumSamplingInterval,attr,omitempty"`
	HistorizingAttr             bool               `xml:"Historizing,attr,omitempty"`
	Value                       *Value             `xml:"Value"`
	Translation                 []*TranslationType `xml:"Translation"`
	*UAInstance
}

// UAMethodArgument ...
type UAMethodArgument struct {
	Name        string           `xml:"Name"`
	Description []*LocalizedText `xml:"Description"`
}

// UAMethod ...
type UAMethod struct {
	ExecutableAttr          bool                `xml:"Executable,attr,omitempty"`
	UserExecutableAttr      bool                `xml:"UserExecutable,attr,omitempty"`
	MethodDeclarationIdAttr string              `xml:"MethodDeclarationId,attr,omitempty"`
	ArgumentDescription     []*UAMethodArgument `xml:"ArgumentDescription"`
	*UAInstance
}

// TranslationType ...
type TranslationType struct {
	Text  []*LocalizedText            `xml:"Text"`
	Field []*StructureTranslationType `xml:"Field"`
}

// StructureTranslationType ...
type StructureTranslationType struct {
	NameAttr string           `xml:"Name,attr"`
	Text     []*LocalizedText `xml:"Text"`
}

// UAView ...
type UAView struct {
	ContainsNoLoopsAttr bool  `xml:"ContainsNoLoops,attr,omitempty"`
	EventNotifierAttr   uint8 `xml:"EventNotifier,attr,omitempty"`
	*UAInstance
}

// UAType ...
type UAType struct {
	IsAbstractAttr bool `xml:"IsAbstract,attr,omitempty"`
	*UANode
}

// UAObjectType ...
type UAObjectType struct {
	*UAType
}

// UAVariableType ...
type UAVariableType struct {
	DataTypeAttr        string `xml:"DataType,attr,omitempty"`
	ValueRankAttr       int    `xml:"ValueRank,attr,omitempty"`
	ArrayDimensionsAttr string `xml:"ArrayDimensions,attr,omitempty"`
	Value               *Value `xml:"Value"`
	*UAType
}

// DataTypePurpose ...
type DataTypePurpose string

// UADataType ...
type UADataType struct {
	PurposeAttr string              `xml:"Purpose,attr,omitempty"`
	Definition  *DataTypeDefinition `xml:"Definition"`
	*UAType
}

// DataTypeDefinition ...
type DataTypeDefinition struct {
	NameAttr         string           `xml:"Name,attr"`
	SymbolicNameAttr string           `xml:"SymbolicName,attr,omitempty"`
	IsUnionAttr      bool             `xml:"IsUnion,attr,omitempty"`
	IsOptionSetAttr  bool             `xml:"IsOptionSet,attr,omitempty"`
	BaseTypeAttr     string           `xml:"BaseType,attr,omitempty"`
	Field            []*DataTypeField `xml:"Field"`
}

// DataTypeField ...
type DataTypeField struct {
	NameAttr            string           `xml:"Name,attr"`
	SymbolicNameAttr    string           `xml:"SymbolicName,attr,omitempty"`
	DataTypeAttr        string           `xml:"DataType,attr,omitempty"`
	ValueRankAttr       int              `xml:"ValueRank,attr,omitempty"`
	ArrayDimensionsAttr string           `xml:"ArrayDimensions,attr,omitempty"`
	MaxStringLengthAttr uint32           `xml:"MaxStringLength,attr,omitempty"`
	ValueAttr           int              `xml:"Value,attr,omitempty"`
	IsOptionalAttr      bool             `xml:"IsOptional,attr,omitempty"`
	AllowSubTypesAttr   bool             `xml:"AllowSubTypes,attr,omitempty"`
	DisplayName         []*LocalizedText `xml:"DisplayName"`
	Description         []*LocalizedText `xml:"Description"`
}

// UAReferenceType ...
type UAReferenceType struct {
	SymmetricAttr bool             `xml:"Symmetric,attr,omitempty"`
	InverseName   []*LocalizedText `xml:"InverseName"`
	*UAType
}
