-\r
-type Limit = \r
- | Nolimit \r
- | Inclusive { value : Double } \r
- | Exclusive { value : Double } \r
- | InclusiveLong { value : Long } \r
- | ExclusiveLong { value : Long }\r
-\r
-type Range = { lower : Limit, upper : Limit }\r
-\r
-type Component = { name : String, type : DataType }\r
-type DataTypeDefinition = { name : String, type : DataType }\r
-\r
-type DataType =\r
- | BooleanType {}\r
- | ByteType { unit : Optional(String), range : Optional(Range) }\r
- | IntegerType { unit : Optional(String), range : Optional(Range) }\r
- | LongType { unit : Optional(String), range : Optional(Range) }\r
- | FloatType { unit : Optional(String), range : Optional(Range) }\r
- | DoubleType { unit : Optional(String), range : Optional(Range) }\r
- | StringType { pattern : Optional(String), mimeType : Optional(String), length : Optional(String) }\r
- | RecordType referable { referable : Boolean, components : Component[] }\r
- | ArrayType { componentType : DataType, length : Optional(Range) }\r
- | MapType { keyType : DataType, valueType : DataType }\r
- | OptionalType { componentType : DataType }\r
- | UnionType UnionType\r
- | VariantType {}\r
-\r
-type UnionType = { components : Component[] }\r
-\r
-type UUID = { mostSigBits : Long, leastSigBits : Long }\r
-type Void = {}\r
-type URI = String\r
-type LocalizedText = Map(String, String)\r
-\r
-type Interface = {\r
- methodDefinitions : Map(MethodTypeDefinition, {})\r
- }\r
-type InterfaceDefinition = {\r
- name : String,\r
- type : Interface\r
- }\r
-type MethodType = {\r
- requestType : DataType,\r
- responseType : DataType,\r
- errorType : UnionType\r
- }\r
-type MethodTypeDefinition = {\r
- name : String,\r
- type : MethodType\r
- }\r
-\r
-\r
-type Handshake = | Version0\r
-type Version0 = {\r
- recvMsgLimit : Integer,\r
- sendMsgLimit : Integer,\r
- methods : MethodTypeDefinition[]\r
- }\r
-type Message = | RequestHeader RequestHeader \r
- | ResponseHeader ResponseHeader\r
- | ExecutionError_ ExecutionError_\r
- | Exception_ Exception_\r
- | InvalidMethodError InvalidMethodError\r
- | ResponseTooLarge ResponseTooLarge\r
-type RequestHeader = {\r
- requestId : Integer,\r
- methodId : Integer\r
- }\r
-type ResponseHeader = {\r
- requestId : Integer\r
- }\r
-type ExecutionError_ = {\r
- requestId : Integer\r
- }\r
-type InvalidMethodError = {\r
- requestId : Integer\r
- }\r
-type Exception_ = {\r
- requestId : Integer, \r
- message : String\r
- }\r
-type ResponseTooLarge = {\r
- requestId : Integer \r
- }\r
-\r
-type AccessorReference = | ArrayIndexReference { childReference : Optional(AccessorReference), index : Integer }\r
- | KeyReference { childReference : Optional(AccessorReference), key : Variant }\r
- | OptionalValueReference { childReference : Optional(AccessorReference) }\r
- | FieldIndexReference { childReference : Optional(AccessorReference), index : Integer }\r
- | FieldNameReference { childReference : Optional(AccessorReference), fieldName : String }\r
- | TagReference { childReference : Optional(AccessorReference) }\r
- | TagIndexReference { childReference : Optional(AccessorReference), tag : Integer }\r
- | TagNameReference { childReference : Optional(AccessorReference), tag : String }\r
- | VariantValueReference { childReference : Optional(AccessorReference) }\r
- | LabelReference { childReference : Optional(AccessorReference), label : String }\r
-\r
-type Event = | ArrayElementAdded { reference : Optional( AccessorReference ), index : Integer, value : Optional( Variant ) }\r
- | ArrayElementRemoved { reference : Optional( AccessorReference ), index : Integer }\r
- | MapEntryAdded { reference : Optional( AccessorReference ), key : Variant, value : Optional( Variant ) }\r
- | MapEntryRemoved { reference : Optional( AccessorReference ), key : Variant }\r
- | UnionValueAssigned { reference : Optional( AccessorReference ), tag : Integer, newValue : Optional( Variant ) }\r
- | OptionalValueAssigned { reference : Optional( AccessorReference ), newValue : Optional( Variant ) }\r
- | OptionalValueRemoved { reference : Optional( AccessorReference ) }\r
- | ValueAssigned { reference : Optional( AccessorReference ), newValue : Optional( Variant ) }\r
- | InvalidatedEvent { reference : Optional( AccessorReference ) }\r
- \r
-type ChangeSet = { events : Event[] }\r
-\r
-type InterestSet = | BooleanInterestSet { notification : Boolean, value : Boolean }\r
- | ByteInterestSet { notification : Boolean, value : Boolean }\r
- | IntegerInterestSet { notification : Boolean, value : Boolean }\r
- | LongInterestSet { notification : Boolean, value : Boolean }\r
- | FloatInterestSet { notification : Boolean, value : Boolean }\r
- | DoubleInterestSet { notification : Boolean, value : Boolean }\r
- | StringInterestSet { notification : Boolean, value : Boolean }\r
- | RecordInterestSet { notification : Boolean, notifications : Boolean[], value : Boolean, values : Boolean[] }\r
- | ArrayInterestSet { notification : Boolean, notifications : Integer[], value : Boolean, values : Integer[] }\r
- | MapInterestSet { notification : Boolean, notifications : Variant[], value : Boolean, values : Variant[], componentInterest : InterestSet, componentInterests : Map( Variant, InterestSet ) }\r
- | OptionalInterestSet { notification : Boolean, value : Boolean, componentInterest : InterestSet }\r
- | UnionInterestSet { notification : Boolean, value : Boolean, componentInterests : InterestSet[] }\r
- | VariantInterestSet { notification : Boolean, value : Boolean, componentInterest : InterestSet, completeComponent : Boolean }\r
-\r
-type Datasource = {\r
- nodes : Map(Variant, Node)\r
- }\r
-type Node = {\r
- id : Variant,\r
- labels : LocalizedText,\r
- children : Variant[],\r
- value : Optional(Variant)\r
- }\r
-\r
-type Instant = { \r
- seconds : Long, \r
- nanoSeconds : Integer(range=[0..999999999])\r
- }\r
-\r
-type Duration = { \r
- seconds : Long, \r
- nanoSeconds : Integer(range=[0..999999999]) \r
- }\r
-\r
-type LocalDate = { \r
- year : Integer, \r
- monthOfYear : Integer(range=[1..12]), \r
- dayOfMonth : Integer(range=[1..31]) \r
- }\r
- \r
-type LocalTime = { \r
- hourOfDay : Integer(range=[0..23]),\r
- minuteOfHour : Integer(range=[0..59]),\r
- secondOfMinute : Integer(range=[0..59]),\r
- nanoOfSecond : Integer(range=[0..999999999])\r
- }\r
- \r
-type LocalDateTime = {\r
- year : Integer, \r
- monthOfYear : Integer(range=[1..12]), \r
- dayOfMonth : Integer(range=[1..31]), \r
- hourOfDay : Integer(range=[0..23]),\r
- minuteOfHour : Integer(range=[0..59]),\r
- secondOfMinute : Integer(range=[0..59]),\r
- nanoOfSecond : Integer(range=[0..999999999])\r
- }\r
- \r
-type ZonedDateTime = {\r
- date : LocalDate,\r
- time : LocalTime,\r
- zone : TimeZone\r
- }\r
- \r
-type TimeZone = { zoneId : String }\r
-\r
-// A result of a data capturing session\r
-type RecordingSession = {\r
- // An optional Datasource URL\r
- datasource : Optional( String ),\r
- \r
- // Events that occured in the data source during sampling, a map of Event Id to Event\r
- events: Map( Integer, Event ),\r
- \r
- // A collection of events that are promoted to milestones, a map of Milestone Id to Event Id\r
- milestones : Map( Integer, Integer ),\r
- \r
- // All records, a map of NodeId to Recording(T, V)\r
- recordings : Map( Variant, Variant )\r
- }\r
- \r
-type SubscriptionParameters = {\r
- nodeId : Variant,\r
- deadband : Optional( Variant ),\r
- interval : Optional( Variant )\r
- }\r
-\r
-type SamplingConfiguration = {\r
- // Capture events, if true events are captured\r
- captureEvents : Boolean,\r
- // Subscribed Variables\r
- subscriptions : SubscriptionParameters[]\r
- }\r
- \r
-type Event = {\r
- // Session unique identifier\r
- id : Integer,\r
-\r
- // Timevalue, a number type e.g. Double(unit="s"), or a date type (See #Time_Types)\r
- time : Variant,\r
-\r
- // Title\r
- title : Optional(String), \r
-\r
- // Message\r
- message : String,\r
- \r
- // NodeId of the sender object, optional\r
- source : Optional(Variant),\r
-\r
- // Event Type: alarm, action, error, info, debug\r
- type : String,\r
- \r
- // System Text, generated by the source system, eg. \94YD11D001 started\94\r
- systemText : Optional(String), \r
-\r
- // Comments\r
- comments : Comment[],\r
-\r
- // Other Metadata\r
- metadata : Map(String, String) \r
- }\r
-\r
-type Comment = {\r
- user : Optional(String),\r
- message : String\r
- }\r
+
+type Limit =
+ | Nolimit
+ | Inclusive { value : Double }
+ | Exclusive { value : Double }
+ | InclusiveLong { value : Long }
+ | ExclusiveLong { value : Long }
+
+type Range = { lower : Limit, upper : Limit }
+
+type Component = { name : String, type : DataType }
+type DataTypeDefinition = { name : String, type : DataType }
+
+type DataType =
+ | BooleanType {}
+ | ByteType { unit : Optional(String), range : Optional(Range) }
+ | IntegerType { unit : Optional(String), range : Optional(Range) }
+ | LongType { unit : Optional(String), range : Optional(Range) }
+ | FloatType { unit : Optional(String), range : Optional(Range) }
+ | DoubleType { unit : Optional(String), range : Optional(Range) }
+ | StringType { pattern : Optional(String), mimeType : Optional(String), length : Optional(String) }
+ | RecordType referable { referable : Boolean, components : Component[] }
+ | ArrayType { componentType : DataType, length : Optional(Range) }
+ | MapType { keyType : DataType, valueType : DataType }
+ | OptionalType { componentType : DataType }
+ | UnionType UnionType
+ | VariantType {}
+
+type UnionType = { components : Component[] }
+
+type UUID = { mostSigBits : Long, leastSigBits : Long }
+type Void = {}
+type URI = String
+type LocalizedText = Map(String, String)
+
+type Interface = {
+ methodDefinitions : Map(MethodTypeDefinition, {})
+ }
+type InterfaceDefinition = {
+ name : String,
+ type : Interface
+ }
+type MethodType = {
+ requestType : DataType,
+ responseType : DataType,
+ errorType : UnionType
+ }
+type MethodTypeDefinition = {
+ name : String,
+ type : MethodType
+ }
+
+
+type Handshake = | Version0
+type Version0 = {
+ recvMsgLimit : Integer,
+ sendMsgLimit : Integer,
+ methods : MethodTypeDefinition[]
+ }
+type Message = | RequestHeader RequestHeader
+ | ResponseHeader ResponseHeader
+ | ExecutionError_ ExecutionError_
+ | Exception_ Exception_
+ | InvalidMethodError InvalidMethodError
+ | ResponseTooLarge ResponseTooLarge
+type RequestHeader = {
+ requestId : Integer,
+ methodId : Integer
+ }
+type ResponseHeader = {
+ requestId : Integer
+ }
+type ExecutionError_ = {
+ requestId : Integer
+ }
+type InvalidMethodError = {
+ requestId : Integer
+ }
+type Exception_ = {
+ requestId : Integer,
+ message : String
+ }
+type ResponseTooLarge = {
+ requestId : Integer
+ }
+
+type AccessorReference = | ArrayIndexReference { childReference : Optional(AccessorReference), index : Integer }
+ | KeyReference { childReference : Optional(AccessorReference), key : Variant }
+ | OptionalValueReference { childReference : Optional(AccessorReference) }
+ | FieldIndexReference { childReference : Optional(AccessorReference), index : Integer }
+ | FieldNameReference { childReference : Optional(AccessorReference), fieldName : String }
+ | TagReference { childReference : Optional(AccessorReference) }
+ | TagIndexReference { childReference : Optional(AccessorReference), tag : Integer }
+ | TagNameReference { childReference : Optional(AccessorReference), tag : String }
+ | VariantValueReference { childReference : Optional(AccessorReference) }
+ | LabelReference { childReference : Optional(AccessorReference), label : String }
+
+type Event = | ArrayElementAdded { reference : Optional( AccessorReference ), index : Integer, value : Optional( Variant ) }
+ | ArrayElementRemoved { reference : Optional( AccessorReference ), index : Integer }
+ | MapEntryAdded { reference : Optional( AccessorReference ), key : Variant, value : Optional( Variant ) }
+ | MapEntryRemoved { reference : Optional( AccessorReference ), key : Variant }
+ | UnionValueAssigned { reference : Optional( AccessorReference ), tag : Integer, newValue : Optional( Variant ) }
+ | OptionalValueAssigned { reference : Optional( AccessorReference ), newValue : Optional( Variant ) }
+ | OptionalValueRemoved { reference : Optional( AccessorReference ) }
+ | ValueAssigned { reference : Optional( AccessorReference ), newValue : Optional( Variant ) }
+ | InvalidatedEvent { reference : Optional( AccessorReference ) }
+
+type ChangeSet = { events : Event[] }
+
+type InterestSet = | BooleanInterestSet { notification : Boolean, value : Boolean }
+ | ByteInterestSet { notification : Boolean, value : Boolean }
+ | IntegerInterestSet { notification : Boolean, value : Boolean }
+ | LongInterestSet { notification : Boolean, value : Boolean }
+ | FloatInterestSet { notification : Boolean, value : Boolean }
+ | DoubleInterestSet { notification : Boolean, value : Boolean }
+ | StringInterestSet { notification : Boolean, value : Boolean }
+ | RecordInterestSet { notification : Boolean, notifications : Boolean[], value : Boolean, values : Boolean[] }
+ | ArrayInterestSet { notification : Boolean, notifications : Integer[], value : Boolean, values : Integer[] }
+ | MapInterestSet { notification : Boolean, notifications : Variant[], value : Boolean, values : Variant[], componentInterest : InterestSet, componentInterests : Map( Variant, InterestSet ) }
+ | OptionalInterestSet { notification : Boolean, value : Boolean, componentInterest : InterestSet }
+ | UnionInterestSet { notification : Boolean, value : Boolean, componentInterests : InterestSet[] }
+ | VariantInterestSet { notification : Boolean, value : Boolean, componentInterest : InterestSet, completeComponent : Boolean }
+
+type Datasource = {
+ nodes : Map(Variant, Node)
+ }
+type Node = {
+ id : Variant,
+ labels : LocalizedText,
+ children : Variant[],
+ value : Optional(Variant)
+ }
+
+type Instant = {
+ seconds : Long,
+ nanoSeconds : Integer(range=[0..999999999])
+ }
+
+type Duration = {
+ seconds : Long,
+ nanoSeconds : Integer(range=[0..999999999])
+ }
+
+type LocalDate = {
+ year : Integer,
+ monthOfYear : Integer(range=[1..12]),
+ dayOfMonth : Integer(range=[1..31])
+ }
+
+type LocalTime = {
+ hourOfDay : Integer(range=[0..23]),
+ minuteOfHour : Integer(range=[0..59]),
+ secondOfMinute : Integer(range=[0..59]),
+ nanoOfSecond : Integer(range=[0..999999999])
+ }
+
+type LocalDateTime = {
+ year : Integer,
+ monthOfYear : Integer(range=[1..12]),
+ dayOfMonth : Integer(range=[1..31]),
+ hourOfDay : Integer(range=[0..23]),
+ minuteOfHour : Integer(range=[0..59]),
+ secondOfMinute : Integer(range=[0..59]),
+ nanoOfSecond : Integer(range=[0..999999999])
+ }
+
+type ZonedDateTime = {
+ date : LocalDate,
+ time : LocalTime,
+ zone : TimeZone
+ }
+
+type TimeZone = { zoneId : String }
+
+// A result of a data capturing session
+type RecordingSession = {
+ // An optional Datasource URL
+ datasource : Optional( String ),
+
+ // Events that occured in the data source during sampling, a map of Event Id to Event
+ events: Map( Integer, Event ),
+
+ // A collection of events that are promoted to milestones, a map of Milestone Id to Event Id
+ milestones : Map( Integer, Integer ),
+
+ // All records, a map of NodeId to Recording(T, V)
+ recordings : Map( Variant, Variant )
+ }
+
+type SubscriptionParameters = {
+ nodeId : Variant,
+ deadband : Optional( Variant ),
+ interval : Optional( Variant )
+ }
+
+type SamplingConfiguration = {
+ // Capture events, if true events are captured
+ captureEvents : Boolean,
+ // Subscribed Variables
+ subscriptions : SubscriptionParameters[]
+ }
+
+type Event = {
+ // Session unique identifier
+ id : Integer,
+
+ // Timevalue, a number type e.g. Double(unit="s"), or a date type (See #Time_Types)
+ time : Variant,
+
+ // Title
+ title : Optional(String),
+
+ // Message
+ message : String,
+
+ // NodeId of the sender object, optional
+ source : Optional(Variant),
+
+ // Event Type: alarm, action, error, info, debug
+ type : String,
+
+ // System Text, generated by the source system, eg. \94YD11D001 started\94
+ systemText : Optional(String),
+
+ // Comments
+ comments : Comment[],
+
+ // Other Metadata
+ metadata : Map(String, String)
+ }
+
+type Comment = {
+ user : Optional(String),
+ message : String
+ }