module OpcXmlDaClient.Protocol.XmlConstruction
  ( subscribe,
    getStatus,
    write,
    read,
    subscriptionPolledRefresh,
    subscriptionCancel,
    browse,
    getProperties,
  )
where

import qualified Data.ByteString.Base64 as Base64
import qualified Data.Vector.Generic as Gv
import OpcXmlDaClient.Base.Prelude hiding (Read, read)
import qualified OpcXmlDaClient.Protocol.Namespaces as Ns
import OpcXmlDaClient.Protocol.Types
import qualified OpcXmlDaClient.XmlBuilder as X
import qualified OpcXmlDaClient.XmlSchemaValues.Rendering as XmlSchemaValuesRendering
import OpcXmlDaClient.XmlSchemaValues.Types
import qualified Text.Builder as Tb

-- * Documents

subscribe :: Subscribe -> ByteString
subscribe :: Subscribe -> ByteString
subscribe = Element -> ByteString
inSoapEnvelope (Element -> ByteString)
-> (Subscribe -> Element) -> Subscribe -> ByteString
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Text -> Subscribe -> Element
subscribeElement Text
"Subscribe"

getStatus :: GetStatus -> ByteString
getStatus :: GetStatus -> ByteString
getStatus = Element -> ByteString
inSoapEnvelope (Element -> ByteString)
-> (GetStatus -> Element) -> GetStatus -> ByteString
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Text -> GetStatus -> Element
getStatusElement Text
"GetStatus"

write :: Write -> ByteString
write :: Write -> ByteString
write = Element -> ByteString
inSoapEnvelope (Element -> ByteString)
-> (Write -> Element) -> Write -> ByteString
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Text -> Write -> Element
writeElement Text
"Write"

read :: Read -> ByteString
read :: Read -> ByteString
read = Element -> ByteString
inSoapEnvelope (Element -> ByteString) -> (Read -> Element) -> Read -> ByteString
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Text -> Read -> Element
readElement Text
"Read"

subscriptionPolledRefresh :: SubscriptionPolledRefresh -> ByteString
subscriptionPolledRefresh :: SubscriptionPolledRefresh -> ByteString
subscriptionPolledRefresh = Element -> ByteString
inSoapEnvelope (Element -> ByteString)
-> (SubscriptionPolledRefresh -> Element)
-> SubscriptionPolledRefresh
-> ByteString
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Text -> SubscriptionPolledRefresh -> Element
subscriptionPolledRefreshElement Text
"SubscriptionPolledRefresh"

subscriptionCancel :: SubscriptionCancel -> ByteString
subscriptionCancel :: SubscriptionCancel -> ByteString
subscriptionCancel = Element -> ByteString
inSoapEnvelope (Element -> ByteString)
-> (SubscriptionCancel -> Element)
-> SubscriptionCancel
-> ByteString
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Text -> SubscriptionCancel -> Element
subscriptionCancelElement Text
"SubscriptionCancel"

browse :: Browse -> ByteString
browse :: Browse -> ByteString
browse = Element -> ByteString
inSoapEnvelope (Element -> ByteString)
-> (Browse -> Element) -> Browse -> ByteString
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Text -> Browse -> Element
browseElement Text
"Browse"

getProperties :: GetProperties -> ByteString
getProperties :: GetProperties -> ByteString
getProperties = Element -> ByteString
inSoapEnvelope (Element -> ByteString)
-> (GetProperties -> Element) -> GetProperties -> ByteString
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Text -> GetProperties -> Element
getPropertiesElement Text
"GetProperties"

-- |
-- Wraps the element in the following snippet.
--
-- > <SOAP-ENV:Envelope
-- >   xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
-- >   xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
-- >   xmlns:xsd="http://www.w3.org/2001/XMLSchema"
-- >   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-- >   <SOAP-ENV:Header/>
-- >   <SOAP-ENV:Body xmlns:opc="http://opcfoundation.org/webservices/XMLDA/1.0/">
-- >     ...
-- >   </SOAP-ENV:Body>
-- > </SOAP-ENV:Envelope>
inSoapEnvelope :: X.Element -> ByteString
inSoapEnvelope :: Element -> ByteString
inSoapEnvelope Element
element =
  Element -> ByteString
X.elementXml
    ( QName -> [(QName, Content)] -> [Node] -> Element
X.element
        (Text -> QName
soapEnvQName Text
"Envelope")
        []
        [ Element -> Node
X.elementNode
            ( QName -> [(QName, Content)] -> [Node] -> Element
X.element
                (Text -> QName
soapEnvQName Text
"Header")
                []
                []
            ),
          Element -> Node
X.elementNode
            ( QName -> [(QName, Content)] -> [Node] -> Element
X.element
                (Text -> QName
soapEnvQName Text
"Body")
                []
                [Element -> Node
X.elementNode Element
element]
            )
        ]
    )

-- * Elements

-- Some OPC Servers don't like XML elements of the form
-- <foo attr="bar"/>
-- but prefer the the form
-- <foo attr="bar"></foo>
-- When passing an empty Node list to X.element,
-- the former is generated.
-- An empty Node coaxes xml-conduit to use the latter form.
noContent :: [X.Node]
noContent :: [Node]
noContent = [((Content -> Node
X.contentNode (Content -> Node) -> (Text -> Content) -> Text -> Node
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Text -> Content
X.textContent) Text
"")]

subscribeElement :: Text -> Subscribe -> X.Element
subscribeElement :: Text -> Subscribe -> Element
subscribeElement Text
elementName Subscribe
x =
  QName -> [(QName, Content)] -> [Node] -> Element
X.element
    (Text -> QName
opcQName Text
elementName)
    ( [Maybe (QName, Content)] -> [(QName, Content)]
forall a. [Maybe a] -> [a]
catMaybes
        [ (QName, Content) -> Maybe (QName, Content)
forall a. a -> Maybe a
Just (QName
"ReturnValuesOnReply", Bool -> Content
booleanContent (IsLabel "returnValuesOnReply" (Subscribe -> Bool)
Subscribe -> Bool
#returnValuesOnReply Subscribe
x)),
          (QName
"SubscriptionPingRate",) (Content -> (QName, Content))
-> (Int32 -> Content) -> Int32 -> (QName, Content)
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Int32 -> Content
intContent (Int32 -> (QName, Content))
-> Maybe Int32 -> Maybe (QName, Content)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IsLabel "subscriptionPingRate" (Subscribe -> Maybe Int32)
Subscribe -> Maybe Int32
#subscriptionPingRate Subscribe
x
        ]
    )
    ( [Maybe Node] -> [Node]
forall a. [Maybe a] -> [a]
catMaybes
        [ (RequestOptions -> Node) -> Maybe RequestOptions -> Maybe Node
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Element -> Node
X.elementNode (Element -> Node)
-> (RequestOptions -> Element) -> RequestOptions -> Node
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Text -> RequestOptions -> Element
requestOptionsElement Text
"Options") (IsLabel "options" (Subscribe -> Maybe RequestOptions)
Subscribe -> Maybe RequestOptions
#options Subscribe
x),
          (SubscribeRequestItemList -> Node)
-> Maybe SubscribeRequestItemList -> Maybe Node
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Element -> Node
X.elementNode (Element -> Node)
-> (SubscribeRequestItemList -> Element)
-> SubscribeRequestItemList
-> Node
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Text -> SubscribeRequestItemList -> Element
subscribeRequestItemListElement Text
"ItemList") (IsLabel "itemList" (Subscribe -> Maybe SubscribeRequestItemList)
Subscribe -> Maybe SubscribeRequestItemList
#itemList Subscribe
x)
        ]
    )

requestOptionsElement :: Text -> RequestOptions -> X.Element
requestOptionsElement :: Text -> RequestOptions -> Element
requestOptionsElement Text
elementName RequestOptions
x =
  QName -> [(QName, Content)] -> [Node] -> Element
X.element
    (Text -> QName
opcQName Text
elementName)
    ( [Maybe (QName, Content)] -> [(QName, Content)]
forall a. [Maybe a] -> [a]
catMaybes
        [ if IsLabel "returnErrorText" (RequestOptions -> Bool)
RequestOptions -> Bool
#returnErrorText RequestOptions
x then (QName, Content) -> Maybe (QName, Content)
forall a. a -> Maybe a
Just (QName
"ReturnErrorText", Content
"true") else Maybe (QName, Content)
forall a. Maybe a
Nothing,
          if IsLabel "returnDiagnosticInfo" (RequestOptions -> Bool)
RequestOptions -> Bool
#returnDiagnosticInfo RequestOptions
x then (QName, Content) -> Maybe (QName, Content)
forall a. a -> Maybe a
Just (QName
"ReturnDiagnosticInfo", Content
"true") else Maybe (QName, Content)
forall a. Maybe a
Nothing,
          if IsLabel "returnItemTime" (RequestOptions -> Bool)
RequestOptions -> Bool
#returnItemTime RequestOptions
x then (QName, Content) -> Maybe (QName, Content)
forall a. a -> Maybe a
Just (QName
"ReturnItemTime", Content
"true") else Maybe (QName, Content)
forall a. Maybe a
Nothing,
          if IsLabel "returnItemPath" (RequestOptions -> Bool)
RequestOptions -> Bool
#returnItemPath RequestOptions
x then (QName, Content) -> Maybe (QName, Content)
forall a. a -> Maybe a
Just (QName
"ReturnItemPath", Content
"true") else Maybe (QName, Content)
forall a. Maybe a
Nothing,
          if IsLabel "returnItemName" (RequestOptions -> Bool)
RequestOptions -> Bool
#returnItemName RequestOptions
x then (QName, Content) -> Maybe (QName, Content)
forall a. a -> Maybe a
Just (QName
"ReturnItemName", Content
"true") else Maybe (QName, Content)
forall a. Maybe a
Nothing,
          (UTCTime -> (QName, Content))
-> Maybe UTCTime -> Maybe (QName, Content)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((QName
"RequestDeadline",) (Content -> (QName, Content))
-> (UTCTime -> Content) -> UTCTime -> (QName, Content)
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. UTCTime -> Content
dateTimeContent) (IsLabel "requestDeadline" (RequestOptions -> Maybe UTCTime)
RequestOptions -> Maybe UTCTime
#requestDeadline RequestOptions
x),
          (Text -> (QName, Content)) -> Maybe Text -> Maybe (QName, Content)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((QName
"ClientRequestHandle",) (Content -> (QName, Content))
-> (Text -> Content) -> Text -> (QName, Content)
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Text -> Content
X.textContent) (IsLabel "clientRequestHandle" (RequestOptions -> Maybe Text)
RequestOptions -> Maybe Text
#clientRequestHandle RequestOptions
x),
          (Text -> (QName, Content)) -> Maybe Text -> Maybe (QName, Content)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((QName
"LocaleID",) (Content -> (QName, Content))
-> (Text -> Content) -> Text -> (QName, Content)
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Text -> Content
X.textContent) (IsLabel "localeId" (RequestOptions -> Maybe Text)
RequestOptions -> Maybe Text
#localeId RequestOptions
x)
        ]
    )
    [Node]
noContent

subscribeRequestItemListElement :: Text -> SubscribeRequestItemList -> X.Element
subscribeRequestItemListElement :: Text -> SubscribeRequestItemList -> Element
subscribeRequestItemListElement Text
elementName SubscribeRequestItemList
x =
  QName -> [(QName, Content)] -> [Node] -> Element
X.element
    (Text -> QName
opcQName Text
elementName)
    ( [Maybe (QName, Content)] -> [(QName, Content)]
forall a. [Maybe a] -> [a]
catMaybes
        [ (Text -> (QName, Content)) -> Maybe Text -> Maybe (QName, Content)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((QName
"ItemPath",) (Content -> (QName, Content))
-> (Text -> Content) -> Text -> (QName, Content)
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Text -> Content
X.textContent) (IsLabel "itemPath" (SubscribeRequestItemList -> Maybe Text)
SubscribeRequestItemList -> Maybe Text
#itemPath SubscribeRequestItemList
x),
          (QName -> (QName, Content))
-> Maybe QName -> Maybe (QName, Content)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((QName
"ReqType",) (Content -> (QName, Content))
-> (QName -> Content) -> QName -> (QName, Content)
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. QName -> Content
qNameContent) (IsLabel "reqType" (SubscribeRequestItemList -> Maybe QName)
SubscribeRequestItemList -> Maybe QName
#reqType SubscribeRequestItemList
x),
          (Float -> (QName, Content))
-> Maybe Float -> Maybe (QName, Content)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((QName
"Deadband",) (Content -> (QName, Content))
-> (Float -> Content) -> Float -> (QName, Content)
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Float -> Content
floatContent) (IsLabel "deadband" (SubscribeRequestItemList -> Maybe Float)
SubscribeRequestItemList -> Maybe Float
#deadband SubscribeRequestItemList
x),
          (Int32 -> (QName, Content))
-> Maybe Int32 -> Maybe (QName, Content)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((QName
"RequestedSamplingRate",) (Content -> (QName, Content))
-> (Int32 -> Content) -> Int32 -> (QName, Content)
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Int32 -> Content
intContent) (IsLabel
  "requestedSamplingRate" (SubscribeRequestItemList -> Maybe Int32)
SubscribeRequestItemList -> Maybe Int32
#requestedSamplingRate SubscribeRequestItemList
x),
          (Bool -> (QName, Content)) -> Maybe Bool -> Maybe (QName, Content)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((QName
"EnableBuffering",) (Content -> (QName, Content))
-> (Bool -> Content) -> Bool -> (QName, Content)
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Bool -> Content
booleanContent) (IsLabel "enableBuffering" (SubscribeRequestItemList -> Maybe Bool)
SubscribeRequestItemList -> Maybe Bool
#enableBuffering SubscribeRequestItemList
x)
        ]
    )
    ((SubscribeRequestItem -> Node) -> [SubscribeRequestItem] -> [Node]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Element -> Node
X.elementNode (Element -> Node)
-> (SubscribeRequestItem -> Element)
-> SubscribeRequestItem
-> Node
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Text -> SubscribeRequestItem -> Element
subscribeRequestItemElement Text
"Items") (Vector SubscribeRequestItem -> [Item (Vector SubscribeRequestItem)]
forall l. IsList l => l -> [Item l]
toList (IsLabel
  "items" (SubscribeRequestItemList -> Vector SubscribeRequestItem)
SubscribeRequestItemList -> Vector SubscribeRequestItem
#items SubscribeRequestItemList
x)))

subscribeRequestItemElement :: Text -> SubscribeRequestItem -> X.Element
subscribeRequestItemElement :: Text -> SubscribeRequestItem -> Element
subscribeRequestItemElement Text
elementName SubscribeRequestItem
x =
  QName -> [(QName, Content)] -> [Node] -> Element
X.element
    (Text -> QName
opcQName Text
elementName)
    ( [Maybe (QName, Content)] -> [(QName, Content)]
forall a. [Maybe a] -> [a]
catMaybes
        [ (Text -> (QName, Content)) -> Maybe Text -> Maybe (QName, Content)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((QName
"ItemPath",) (Content -> (QName, Content))
-> (Text -> Content) -> Text -> (QName, Content)
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Text -> Content
X.textContent) (IsLabel "itemPath" (SubscribeRequestItem -> Maybe Text)
SubscribeRequestItem -> Maybe Text
#itemPath SubscribeRequestItem
x),
          (QName -> (QName, Content))
-> Maybe QName -> Maybe (QName, Content)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((QName
"ReqType",) (Content -> (QName, Content))
-> (QName -> Content) -> QName -> (QName, Content)
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. QName -> Content
qNameContent) (IsLabel "reqType" (SubscribeRequestItem -> Maybe QName)
SubscribeRequestItem -> Maybe QName
#reqType SubscribeRequestItem
x),
          (Text -> (QName, Content)) -> Maybe Text -> Maybe (QName, Content)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((QName
"ItemName",) (Content -> (QName, Content))
-> (Text -> Content) -> Text -> (QName, Content)
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Text -> Content
X.textContent) (IsLabel "itemName" (SubscribeRequestItem -> Maybe Text)
SubscribeRequestItem -> Maybe Text
#itemName SubscribeRequestItem
x),
          (Text -> (QName, Content)) -> Maybe Text -> Maybe (QName, Content)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((QName
"ClientItemHandle",) (Content -> (QName, Content))
-> (Text -> Content) -> Text -> (QName, Content)
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Text -> Content
X.textContent) (IsLabel "clientItemHandle" (SubscribeRequestItem -> Maybe Text)
SubscribeRequestItem -> Maybe Text
#clientItemHandle SubscribeRequestItem
x),
          (Float -> (QName, Content))
-> Maybe Float -> Maybe (QName, Content)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((QName
"Deadband",) (Content -> (QName, Content))
-> (Float -> Content) -> Float -> (QName, Content)
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Float -> Content
floatContent) (IsLabel "deadband" (SubscribeRequestItem -> Maybe Float)
SubscribeRequestItem -> Maybe Float
#deadband SubscribeRequestItem
x),
          (Int32 -> (QName, Content))
-> Maybe Int32 -> Maybe (QName, Content)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((QName
"RequestedSamplingRate",) (Content -> (QName, Content))
-> (Int32 -> Content) -> Int32 -> (QName, Content)
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Int32 -> Content
intContent) (IsLabel
  "requestedSamplingRate" (SubscribeRequestItem -> Maybe Int32)
SubscribeRequestItem -> Maybe Int32
#requestedSamplingRate SubscribeRequestItem
x),
          (Bool -> (QName, Content)) -> Maybe Bool -> Maybe (QName, Content)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((QName
"EnableBuffering",) (Content -> (QName, Content))
-> (Bool -> Content) -> Bool -> (QName, Content)
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Bool -> Content
booleanContent) (IsLabel "enableBuffering" (SubscribeRequestItem -> Maybe Bool)
SubscribeRequestItem -> Maybe Bool
#enableBuffering SubscribeRequestItem
x)
        ]
    )
    [Node]
noContent

getStatusElement :: Text -> GetStatus -> X.Element
getStatusElement :: Text -> GetStatus -> Element
getStatusElement Text
elementName GetStatus
x =
  QName -> [(QName, Content)] -> [Node] -> Element
X.element
    (Text -> QName
opcQName Text
elementName)
    ( [Maybe (QName, Content)] -> [(QName, Content)]
forall a. [Maybe a] -> [a]
catMaybes
        [ (QName
"LocaleID",) (Content -> (QName, Content))
-> (Text -> Content) -> Text -> (QName, Content)
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Text -> Content
X.textContent (Text -> (QName, Content)) -> Maybe Text -> Maybe (QName, Content)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IsLabel "localeId" (GetStatus -> Maybe Text)
GetStatus -> Maybe Text
#localeId GetStatus
x,
          (QName
"ClientRequestHandle",) (Content -> (QName, Content))
-> (Text -> Content) -> Text -> (QName, Content)
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Text -> Content
X.textContent (Text -> (QName, Content)) -> Maybe Text -> Maybe (QName, Content)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IsLabel "clientRequestHandle" (GetStatus -> Maybe Text)
GetStatus -> Maybe Text
#clientRequestHandle GetStatus
x
        ]
    )
    [Node]
noContent

itemValueElement :: Text -> ItemValue -> X.Element
itemValueElement :: Text -> ItemValue -> Element
itemValueElement Text
elementName ItemValue
x =
  QName -> [(QName, Content)] -> [Node] -> Element
X.element
    (Text -> QName
opcQName Text
elementName)
    ( [Maybe (QName, Content)] -> [(QName, Content)]
forall a. [Maybe a] -> [a]
catMaybes
        [ (QName
"ValueTypeQualifier",) (Content -> (QName, Content))
-> (QName -> Content) -> QName -> (QName, Content)
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. QName -> Content
qNameContent (QName -> (QName, Content))
-> Maybe QName -> Maybe (QName, Content)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IsLabel "valueTypeQualifier" (ItemValue -> Maybe QName)
ItemValue -> Maybe QName
#valueTypeQualifier ItemValue
x,
          (QName
"ItemPath",) (Content -> (QName, Content))
-> (Text -> Content) -> Text -> (QName, Content)
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Text -> Content
X.textContent (Text -> (QName, Content)) -> Maybe Text -> Maybe (QName, Content)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IsLabel "itemPath" (ItemValue -> Maybe Text)
ItemValue -> Maybe Text
#itemPath ItemValue
x,
          (QName
"ItemName",) (Content -> (QName, Content))
-> (Text -> Content) -> Text -> (QName, Content)
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Text -> Content
X.textContent (Text -> (QName, Content)) -> Maybe Text -> Maybe (QName, Content)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IsLabel "itemName" (ItemValue -> Maybe Text)
ItemValue -> Maybe Text
#itemName ItemValue
x,
          (QName
"ClientItemHandle",) (Content -> (QName, Content))
-> (Text -> Content) -> Text -> (QName, Content)
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Text -> Content
X.textContent (Text -> (QName, Content)) -> Maybe Text -> Maybe (QName, Content)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IsLabel "clientItemHandle" (ItemValue -> Maybe Text)
ItemValue -> Maybe Text
#clientItemHandle ItemValue
x,
          (QName
"Timestamp",) (Content -> (QName, Content))
-> (UTCTime -> Content) -> UTCTime -> (QName, Content)
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. UTCTime -> Content
dateTimeContent (UTCTime -> (QName, Content))
-> Maybe UTCTime -> Maybe (QName, Content)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IsLabel "timestamp" (ItemValue -> Maybe UTCTime)
ItemValue -> Maybe UTCTime
#timestamp ItemValue
x,
          (QName
"ResultID",) (Content -> (QName, Content))
-> (QName -> Content) -> QName -> (QName, Content)
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. QName -> Content
qNameContent (QName -> (QName, Content))
-> Maybe QName -> Maybe (QName, Content)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IsLabel "resultId" (ItemValue -> Maybe QName)
ItemValue -> Maybe QName
#resultId ItemValue
x
        ]
    )
    ( [Maybe Node] -> [Node]
forall a. [Maybe a] -> [a]
catMaybes
        [ Element -> Node
X.elementNode (Element -> Node) -> (Text -> Element) -> Text -> Node
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Text -> Text -> Element
diagnosticInfoElement Text
"DiagnosticInfo" (Text -> Node) -> Maybe Text -> Maybe Node
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IsLabel "diagnosticInfo" (ItemValue -> Maybe Text)
ItemValue -> Maybe Text
#diagnosticInfo ItemValue
x,
          Element -> Node
X.elementNode (Element -> Node) -> (Value -> Element) -> Value -> Node
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Text -> Value -> Element
valueElement Text
"Value" (Value -> Node) -> Maybe Value -> Maybe Node
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IsLabel "value" (ItemValue -> Maybe Value)
ItemValue -> Maybe Value
#value ItemValue
x,
          Element -> Node
X.elementNode (Element -> Node) -> (OpcQuality -> Element) -> OpcQuality -> Node
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Text -> OpcQuality -> Element
opcQualityElement Text
"Quality" (OpcQuality -> Node) -> Maybe OpcQuality -> Maybe Node
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IsLabel "quality" (ItemValue -> Maybe OpcQuality)
ItemValue -> Maybe OpcQuality
#quality ItemValue
x
        ]
    )

valueElement :: Text -> Value -> X.Element
valueElement :: Text -> Value -> Element
valueElement Text
elementName Value
x =
  case Value
x of
    StringValue Text
x -> Text -> Content -> Element
primitive Text
"string" (Content -> Element) -> Content -> Element
forall a b. (a -> b) -> a -> b
$ Text -> Content
stringContent Text
x
    BooleanValue Bool
x -> Text -> Content -> Element
primitive Text
"boolean" (Content -> Element) -> Content -> Element
forall a b. (a -> b) -> a -> b
$ Bool -> Content
booleanContent Bool
x
    FloatValue Float
x -> Text -> Content -> Element
primitive Text
"float" (Content -> Element) -> Content -> Element
forall a b. (a -> b) -> a -> b
$ Float -> Content
floatContent Float
x
    DoubleValue Double
x -> Text -> Content -> Element
primitive Text
"double" (Content -> Element) -> Content -> Element
forall a b. (a -> b) -> a -> b
$ Double -> Content
doubleContent Double
x
    DecimalValue Scientific
x -> Text -> Content -> Element
primitive Text
"decimal" (Content -> Element) -> Content -> Element
forall a b. (a -> b) -> a -> b
$ Scientific -> Content
decimalContent Scientific
x
    LongValue Int64
x -> Text -> Content -> Element
primitive Text
"long" (Content -> Element) -> Content -> Element
forall a b. (a -> b) -> a -> b
$ Int64 -> Content
longContent Int64
x
    IntValue Int32
x -> Text -> Content -> Element
primitive Text
"int" (Content -> Element) -> Content -> Element
forall a b. (a -> b) -> a -> b
$ Int32 -> Content
intContent Int32
x
    ShortValue Int16
x -> Text -> Content -> Element
primitive Text
"short" (Content -> Element) -> Content -> Element
forall a b. (a -> b) -> a -> b
$ Int16 -> Content
shortContent Int16
x
    ByteValue Int8
x -> Text -> Content -> Element
primitive Text
"byte" (Content -> Element) -> Content -> Element
forall a b. (a -> b) -> a -> b
$ Int8 -> Content
byteContent Int8
x
    UnsignedLongValue Word64
x -> Text -> Content -> Element
primitive Text
"unsignedLong" (Content -> Element) -> Content -> Element
forall a b. (a -> b) -> a -> b
$ Word64 -> Content
unsignedLongContent Word64
x
    UnsignedIntValue Word32
x -> Text -> Content -> Element
primitive Text
"unsignedInt" (Content -> Element) -> Content -> Element
forall a b. (a -> b) -> a -> b
$ Word32 -> Content
unsignedIntContent Word32
x
    UnsignedShortValue Word16
x -> Text -> Content -> Element
primitive Text
"unsignedShort" (Content -> Element) -> Content -> Element
forall a b. (a -> b) -> a -> b
$ Word16 -> Content
unsignedShortContent Word16
x
    UnsignedByteValue Word8
x -> Text -> Content -> Element
primitive Text
"unsignedByte" (Content -> Element) -> Content -> Element
forall a b. (a -> b) -> a -> b
$ Word8 -> Content
unsignedByteContent Word8
x
    Base64BinaryValue ByteString
x -> Text -> Content -> Element
primitive Text
"base64Binary" (Content -> Element) -> Content -> Element
forall a b. (a -> b) -> a -> b
$ ByteString -> Content
base64BinaryContent ByteString
x
    DateTimeValue UTCTime
x -> Text -> Content -> Element
primitive Text
"dateTime" (Content -> Element) -> Content -> Element
forall a b. (a -> b) -> a -> b
$ UTCTime -> Content
dateTimeContent UTCTime
x
    TimeValue Time
x -> Text -> Content -> Element
primitive Text
"time" (Content -> Element) -> Content -> Element
forall a b. (a -> b) -> a -> b
$ Time -> Content
timeContent Time
x
    DateValue Date
x -> Text -> Content -> Element
primitive Text
"date" (Content -> Element) -> Content -> Element
forall a b. (a -> b) -> a -> b
$ Date -> Content
dateContent Date
x
    DurationValue Duration
x -> Text -> Content -> Element
primitive Text
"duration" (Content -> Element) -> Content -> Element
forall a b. (a -> b) -> a -> b
$ Duration -> Content
durationContent Duration
x
    QNameValue QName
x -> Text -> Content -> Element
primitive Text
"QName" (Content -> Element) -> Content -> Element
forall a b. (a -> b) -> a -> b
$ QName -> Content
qNameContent QName
x
    ArrayOfByteValue Vector Int8
x -> Text -> Text -> (Int8 -> Content) -> Vector Int8 -> Element
forall (v :: * -> *) a.
Vector v a =>
Text -> Text -> (a -> Content) -> v a -> Element
primitiveArray Text
"ArrayOfByte" Text
"byte" Int8 -> Content
byteContent Vector Int8
x
    ArrayOfShortValue Vector Int16
x -> Text -> Text -> (Int16 -> Content) -> Vector Int16 -> Element
forall (v :: * -> *) a.
Vector v a =>
Text -> Text -> (a -> Content) -> v a -> Element
primitiveArray Text
"ArrayOfShort" Text
"short" Int16 -> Content
shortContent Vector Int16
x
    ArrayOfUnsignedShortValue Vector Word16
x -> Text -> Text -> (Word16 -> Content) -> Vector Word16 -> Element
forall (v :: * -> *) a.
Vector v a =>
Text -> Text -> (a -> Content) -> v a -> Element
primitiveArray Text
"ArrayOfUnsignedShort" Text
"unsignedShort" Word16 -> Content
unsignedShortContent Vector Word16
x
    ArrayOfIntValue Vector Int32
x -> Text -> Text -> (Int32 -> Content) -> Vector Int32 -> Element
forall (v :: * -> *) a.
Vector v a =>
Text -> Text -> (a -> Content) -> v a -> Element
primitiveArray Text
"ArrayOfInt" Text
"int" Int32 -> Content
intContent Vector Int32
x
    ArrayOfUnsignedIntValue Vector Word32
x -> Text -> Text -> (Word32 -> Content) -> Vector Word32 -> Element
forall (v :: * -> *) a.
Vector v a =>
Text -> Text -> (a -> Content) -> v a -> Element
primitiveArray Text
"ArrayOfUnsignedInt" Text
"unsignedInt" Word32 -> Content
unsignedIntContent Vector Word32
x
    ArrayOfLongValue Vector Int64
x -> Text -> Text -> (Int64 -> Content) -> Vector Int64 -> Element
forall (v :: * -> *) a.
Vector v a =>
Text -> Text -> (a -> Content) -> v a -> Element
primitiveArray Text
"ArrayOfLong" Text
"long" Int64 -> Content
longContent Vector Int64
x
    ArrayOfUnsignedLongValue Vector Word64
x -> Text -> Text -> (Word64 -> Content) -> Vector Word64 -> Element
forall (v :: * -> *) a.
Vector v a =>
Text -> Text -> (a -> Content) -> v a -> Element
primitiveArray Text
"ArrayOfUnsignedLong" Text
"unsignedLong" Word64 -> Content
unsignedLongContent Vector Word64
x
    ArrayOfFloatValue Vector Float
x -> Text -> Text -> (Float -> Content) -> Vector Float -> Element
forall (v :: * -> *) a.
Vector v a =>
Text -> Text -> (a -> Content) -> v a -> Element
primitiveArray Text
"ArrayOfFloat" Text
"float" Float -> Content
floatContent Vector Float
x
    ArrayOfDecimalValue Vector Scientific
x -> Text
-> Text -> (Scientific -> Content) -> Vector Scientific -> Element
forall (v :: * -> *) a.
Vector v a =>
Text -> Text -> (a -> Content) -> v a -> Element
primitiveArray Text
"ArrayOfDecimal" Text
"decimal" Scientific -> Content
decimalContent Vector Scientific
x
    ArrayOfDoubleValue Vector Double
x -> Text -> Text -> (Double -> Content) -> Vector Double -> Element
forall (v :: * -> *) a.
Vector v a =>
Text -> Text -> (a -> Content) -> v a -> Element
primitiveArray Text
"ArrayOfDouble" Text
"double" Double -> Content
doubleContent Vector Double
x
    ArrayOfBooleanValue Vector Bool
x -> Text -> Text -> (Bool -> Content) -> Vector Bool -> Element
forall (v :: * -> *) a.
Vector v a =>
Text -> Text -> (a -> Content) -> v a -> Element
primitiveArray Text
"ArrayOfBoolean" Text
"boolean" Bool -> Content
booleanContent Vector Bool
x
    ArrayOfStringValue Vector Text
x -> Text -> Text -> (Text -> Content) -> Vector Text -> Element
forall (v :: * -> *) a.
Vector v a =>
Text -> Text -> (a -> Content) -> v a -> Element
primitiveArray Text
"ArrayOfString" Text
"string" Text -> Content
stringContent Vector Text
x
    ArrayOfDateTimeValue Vector UTCTime
x -> Text -> Text -> (UTCTime -> Content) -> Vector UTCTime -> Element
forall (v :: * -> *) a.
Vector v a =>
Text -> Text -> (a -> Content) -> v a -> Element
primitiveArray Text
"ArrayOfDateTime" Text
"dateTime" UTCTime -> Content
dateTimeContent Vector UTCTime
x
    ArrayOfAnyTypeValue Vector (Maybe Value)
x ->
      QName -> [Node] -> Element
element (Text -> Text -> QName
X.namespacedQName Text
Ns.opc Text
"ArrayOfAnyType") ([Node] -> Element) -> [Node] -> Element
forall a b. (a -> b) -> a -> b
$ (Maybe Value -> Node) -> [Maybe Value] -> [Node]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Maybe Value -> Node
item ([Maybe Value] -> [Node]) -> [Maybe Value] -> [Node]
forall a b. (a -> b) -> a -> b
$ Vector (Maybe Value) -> [Item (Vector (Maybe Value))]
forall l. IsList l => l -> [Item l]
toList Vector (Maybe Value)
x
      where
        item :: Maybe Value -> Node
item = \case
          Just Value
x ->
            Element -> Node
X.elementNode (Element -> Node) -> Element -> Node
forall a b. (a -> b) -> a -> b
$ Text -> Value -> Element
valueElement Text
"anyType" Value
x
          Maybe Value
Nothing ->
            Element -> Node
X.elementNode (Element -> Node) -> Element -> Node
forall a b. (a -> b) -> a -> b
$ QName -> [(QName, Content)] -> [Node] -> Element
X.element (Text -> QName
opcQName Text
"anyType") [(Text -> QName
xsiQName Text
"isNil", Content
"true")] []
    OpcQualityValue OpcQuality
x ->
      QName -> [(QName, Content)] -> [Node] -> Element
X.element
        (Text -> QName
opcQName Text
elementName)
        ((Text -> QName
xsiQName Text
"type", QName -> Content
X.qNameContent QName
"OPCQuality") (QName, Content) -> [(QName, Content)] -> [(QName, Content)]
forall a. a -> [a] -> [a]
: OpcQuality -> [(QName, Content)]
opcQualityAttributes OpcQuality
x)
        []
    NonStandardValue (ValueNonStandard QName
a [Node]
b) -> QName -> [Node] -> Element
element (QName -> QName
qNameQName QName
a) ((Node -> Node) -> [Node] -> [Node]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Node -> Node
X.astNode [Node]
b)
  where
    element :: QName -> [Node] -> Element
element QName
typeQName =
      QName -> [(QName, Content)] -> [Node] -> Element
X.element (Text -> QName
opcQName Text
elementName) [(Text -> QName
xsiQName Text
"type", QName -> Content
X.qNameContent QName
typeQName)]
    primitive :: Text -> Content -> Element
primitive Text
typeName Content
content =
      QName -> [Node] -> Element
element (Text -> Text -> QName
X.namespacedQName Text
Ns.xsd Text
typeName) [Content -> Node
X.contentNode Content
content]
    primitiveArray :: Gv.Vector v a => Text -> Text -> (a -> X.Content) -> v a -> X.Element
    primitiveArray :: Text -> Text -> (a -> Content) -> v a -> Element
primitiveArray Text
arrayTypeName Text
itemTagName a -> Content
itemContentRenderer v a
array =
      QName -> [Node] -> Element
element (Text -> Text -> QName
X.namespacedQName Text
Ns.opc Text
arrayTypeName) ([Node] -> Element) -> [Node] -> Element
forall a b. (a -> b) -> a -> b
$ (a -> Node) -> [a] -> [Node]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap a -> Node
item ([a] -> [Node]) -> [a] -> [Node]
forall a b. (a -> b) -> a -> b
$ v a -> [a]
forall (v :: * -> *) a. Vector v a => v a -> [a]
Gv.toList v a
array
      where
        item :: a -> Node
item a
x =
          Element -> Node
X.elementNode (Element -> Node) -> Element -> Node
forall a b. (a -> b) -> a -> b
$ QName -> [(QName, Content)] -> [Node] -> Element
X.element (Text -> QName
opcQName Text
itemTagName) [] [Content -> Node
X.contentNode (a -> Content
itemContentRenderer a
x)]

diagnosticInfoElement :: Text -> Text -> X.Element
diagnosticInfoElement :: Text -> Text -> Element
diagnosticInfoElement Text
elementName Text
x =
  QName -> [(QName, Content)] -> [Node] -> Element
X.element (Text -> QName
opcQName Text
elementName) [] [Content -> Node
X.contentNode (Text -> Content
X.textContent Text
x)]

opcQualityElement :: Text -> OpcQuality -> X.Element
opcQualityElement :: Text -> OpcQuality -> Element
opcQualityElement Text
elementName OpcQuality
x =
  QName -> [(QName, Content)] -> [Node] -> Element
X.element (Text -> QName
opcQName Text
elementName) (OpcQuality -> [(QName, Content)]
opcQualityAttributes OpcQuality
x) []

writeRequestItemListElement :: Text -> WriteRequestItemList -> X.Element
writeRequestItemListElement :: Text -> WriteRequestItemList -> Element
writeRequestItemListElement Text
elementName WriteRequestItemList
x =
  QName -> [(QName, Content)] -> [Node] -> Element
X.element
    (Text -> QName
opcQName Text
elementName)
    ( [Maybe (QName, Content)] -> [(QName, Content)]
forall a. [Maybe a] -> [a]
catMaybes
        [(QName
"ItemPath",) (Content -> (QName, Content))
-> (Text -> Content) -> Text -> (QName, Content)
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Text -> Content
X.textContent (Text -> (QName, Content)) -> Maybe Text -> Maybe (QName, Content)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IsLabel "itemPath" (WriteRequestItemList -> Maybe Text)
WriteRequestItemList -> Maybe Text
#itemPath WriteRequestItemList
x]
    )
    (Element -> Node
X.elementNode (Element -> Node) -> (ItemValue -> Element) -> ItemValue -> Node
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Text -> ItemValue -> Element
itemValueElement Text
"Items" (ItemValue -> Node) -> [ItemValue] -> [Node]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Vector ItemValue -> [Item (Vector ItemValue)]
forall l. IsList l => l -> [Item l]
toList (IsLabel "items" (WriteRequestItemList -> Vector ItemValue)
WriteRequestItemList -> Vector ItemValue
#items WriteRequestItemList
x))

writeElement :: Text -> Write -> X.Element
writeElement :: Text -> Write -> Element
writeElement Text
elementName Write
x =
  QName -> [(QName, Content)] -> [Node] -> Element
X.element
    (Text -> QName
opcQName Text
elementName)
    [(QName
"ReturnValuesOnReply", Bool -> Content
booleanContent (IsLabel "returnValuesOnReply" (Write -> Bool)
Write -> Bool
#returnValuesOnReply Write
x))]
    ( [Maybe Node] -> [Node]
forall a. [Maybe a] -> [a]
catMaybes
        [ Element -> Node
X.elementNode (Element -> Node)
-> (WriteRequestItemList -> Element)
-> WriteRequestItemList
-> Node
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Text -> WriteRequestItemList -> Element
writeRequestItemListElement Text
"ItemList" (WriteRequestItemList -> Node)
-> Maybe WriteRequestItemList -> Maybe Node
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IsLabel "itemList" (Write -> Maybe WriteRequestItemList)
Write -> Maybe WriteRequestItemList
#itemList Write
x,
          Element -> Node
X.elementNode (Element -> Node)
-> (RequestOptions -> Element) -> RequestOptions -> Node
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Text -> RequestOptions -> Element
requestOptionsElement Text
"Options" (RequestOptions -> Node) -> Maybe RequestOptions -> Maybe Node
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IsLabel "options" (Write -> Maybe RequestOptions)
Write -> Maybe RequestOptions
#options Write
x
        ]
    )

readRequestItemElement :: Text -> ReadRequestItem -> X.Element
readRequestItemElement :: Text -> ReadRequestItem -> Element
readRequestItemElement Text
elementName ReadRequestItem
x =
  QName -> [(QName, Content)] -> [Node] -> Element
X.element
    (Text -> QName
opcQName Text
elementName)
    ( [Maybe (QName, Content)] -> [(QName, Content)]
forall a. [Maybe a] -> [a]
catMaybes
        [ (QName
"ItemPath",) (Content -> (QName, Content))
-> (Text -> Content) -> Text -> (QName, Content)
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Text -> Content
X.textContent (Text -> (QName, Content)) -> Maybe Text -> Maybe (QName, Content)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IsLabel "itemPath" (ReadRequestItem -> Maybe Text)
ReadRequestItem -> Maybe Text
#itemPath ReadRequestItem
x,
          (QName
"ReqType",) (Content -> (QName, Content))
-> (QName -> Content) -> QName -> (QName, Content)
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. QName -> Content
qNameContent (QName -> (QName, Content))
-> Maybe QName -> Maybe (QName, Content)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IsLabel "reqType" (ReadRequestItem -> Maybe QName)
ReadRequestItem -> Maybe QName
#reqType ReadRequestItem
x,
          (QName
"ItemName",) (Content -> (QName, Content))
-> (Text -> Content) -> Text -> (QName, Content)
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Text -> Content
X.textContent (Text -> (QName, Content)) -> Maybe Text -> Maybe (QName, Content)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IsLabel "itemName" (ReadRequestItem -> Maybe Text)
ReadRequestItem -> Maybe Text
#itemName ReadRequestItem
x,
          (QName
"ClientItemHandle",) (Content -> (QName, Content))
-> (Text -> Content) -> Text -> (QName, Content)
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Text -> Content
X.textContent (Text -> (QName, Content)) -> Maybe Text -> Maybe (QName, Content)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IsLabel "clientItemHandle" (ReadRequestItem -> Maybe Text)
ReadRequestItem -> Maybe Text
#clientItemHandle ReadRequestItem
x,
          (QName
"MaxAge",) (Content -> (QName, Content))
-> (Int32 -> Content) -> Int32 -> (QName, Content)
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Int32 -> Content
intContent (Int32 -> (QName, Content))
-> Maybe Int32 -> Maybe (QName, Content)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IsLabel "maxAge" (ReadRequestItem -> Maybe Int32)
ReadRequestItem -> Maybe Int32
#maxAge ReadRequestItem
x
        ]
    )
    [Node]
noContent

readRequestItemListElement :: Text -> ReadRequestItemList -> X.Element
readRequestItemListElement :: Text -> ReadRequestItemList -> Element
readRequestItemListElement Text
elementName ReadRequestItemList
x =
  QName -> [(QName, Content)] -> [Node] -> Element
X.element
    (Text -> QName
opcQName Text
elementName)
    ( [Maybe (QName, Content)] -> [(QName, Content)]
forall a. [Maybe a] -> [a]
catMaybes
        [ (QName
"ItemPath",) (Content -> (QName, Content))
-> (Text -> Content) -> Text -> (QName, Content)
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Text -> Content
X.textContent (Text -> (QName, Content)) -> Maybe Text -> Maybe (QName, Content)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IsLabel "itemPath" (ReadRequestItemList -> Maybe Text)
ReadRequestItemList -> Maybe Text
#itemPath ReadRequestItemList
x,
          (QName
"ReqType",) (Content -> (QName, Content))
-> (QName -> Content) -> QName -> (QName, Content)
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. QName -> Content
qNameContent (QName -> (QName, Content))
-> Maybe QName -> Maybe (QName, Content)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IsLabel "reqType" (ReadRequestItemList -> Maybe QName)
ReadRequestItemList -> Maybe QName
#reqType ReadRequestItemList
x,
          (QName
"MaxAge",) (Content -> (QName, Content))
-> (Int32 -> Content) -> Int32 -> (QName, Content)
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Int32 -> Content
intContent (Int32 -> (QName, Content))
-> Maybe Int32 -> Maybe (QName, Content)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IsLabel "maxAge" (ReadRequestItemList -> Maybe Int32)
ReadRequestItemList -> Maybe Int32
#maxAge ReadRequestItemList
x
        ]
    )
    (Element -> Node
X.elementNode (Element -> Node)
-> (ReadRequestItem -> Element) -> ReadRequestItem -> Node
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Text -> ReadRequestItem -> Element
readRequestItemElement Text
"Items" (ReadRequestItem -> Node) -> [ReadRequestItem] -> [Node]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Vector ReadRequestItem -> [Item (Vector ReadRequestItem)]
forall l. IsList l => l -> [Item l]
toList (IsLabel "items" (ReadRequestItemList -> Vector ReadRequestItem)
ReadRequestItemList -> Vector ReadRequestItem
#items ReadRequestItemList
x))

readElement :: Text -> Read -> X.Element
readElement :: Text -> Read -> Element
readElement Text
elementName Read
x =
  QName -> [(QName, Content)] -> [Node] -> Element
X.element
    (Text -> QName
opcQName Text
elementName)
    []
    ( [Maybe Node] -> [Node]
forall a. [Maybe a] -> [a]
catMaybes
        [ Element -> Node
X.elementNode (Element -> Node)
-> (RequestOptions -> Element) -> RequestOptions -> Node
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Text -> RequestOptions -> Element
requestOptionsElement Text
"Options" (RequestOptions -> Node) -> Maybe RequestOptions -> Maybe Node
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IsLabel "options" (Read -> Maybe RequestOptions)
Read -> Maybe RequestOptions
#options Read
x,
          Element -> Node
X.elementNode (Element -> Node)
-> (ReadRequestItemList -> Element) -> ReadRequestItemList -> Node
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Text -> ReadRequestItemList -> Element
readRequestItemListElement Text
"ItemList" (ReadRequestItemList -> Node)
-> Maybe ReadRequestItemList -> Maybe Node
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IsLabel "itemList" (Read -> Maybe ReadRequestItemList)
Read -> Maybe ReadRequestItemList
#itemList Read
x
        ]
    )

subscriptionPolledRefreshElement :: Text -> SubscriptionPolledRefresh -> X.Element
subscriptionPolledRefreshElement :: Text -> SubscriptionPolledRefresh -> Element
subscriptionPolledRefreshElement Text
elementName SubscriptionPolledRefresh
x =
  QName -> [(QName, Content)] -> [Node] -> Element
X.element
    (Text -> QName
opcQName Text
elementName)
    ( [Maybe (QName, Content)] -> [(QName, Content)]
forall a. [Maybe a] -> [a]
catMaybes
        [ (QName
"HoldTime",) (Content -> (QName, Content))
-> (UTCTime -> Content) -> UTCTime -> (QName, Content)
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. UTCTime -> Content
dateTimeContent (UTCTime -> (QName, Content))
-> Maybe UTCTime -> Maybe (QName, Content)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IsLabel "holdTime" (SubscriptionPolledRefresh -> Maybe UTCTime)
SubscriptionPolledRefresh -> Maybe UTCTime
#holdTime SubscriptionPolledRefresh
x,
          (QName, Content) -> Maybe (QName, Content)
forall (f :: * -> *) a. Applicative f => a -> f a
pure (QName
"WaitTime", Int32 -> Content
intContent (IsLabel "waitTime" (SubscriptionPolledRefresh -> Int32)
SubscriptionPolledRefresh -> Int32
#waitTime SubscriptionPolledRefresh
x)),
          (QName, Content) -> Maybe (QName, Content)
forall (f :: * -> *) a. Applicative f => a -> f a
pure (QName
"ReturnAllItems", Bool -> Content
booleanContent (IsLabel "returnAllItems" (SubscriptionPolledRefresh -> Bool)
SubscriptionPolledRefresh -> Bool
#returnAllItems SubscriptionPolledRefresh
x))
        ]
    )
    ( [Maybe Node] -> [Node]
forall a. [Maybe a] -> [a]
catMaybes [Element -> Node
X.elementNode (Element -> Node)
-> (RequestOptions -> Element) -> RequestOptions -> Node
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Text -> RequestOptions -> Element
requestOptionsElement Text
"Options" (RequestOptions -> Node) -> Maybe RequestOptions -> Maybe Node
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IsLabel
  "options" (SubscriptionPolledRefresh -> Maybe RequestOptions)
SubscriptionPolledRefresh -> Maybe RequestOptions
#options SubscriptionPolledRefresh
x]
        [Node] -> [Node] -> [Node]
forall a. Semigroup a => a -> a -> a
<> (Text -> Node) -> [Text] -> [Node]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Element -> Node
X.elementNode (Element -> Node) -> (Text -> Element) -> Text -> Node
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Text -> Text -> Element
serverSubHandlesElement Text
"ServerSubHandles") (Vector Text -> [Item (Vector Text)]
forall l. IsList l => l -> [Item l]
toList (IsLabel
  "serverSubHandles" (SubscriptionPolledRefresh -> Vector Text)
SubscriptionPolledRefresh -> Vector Text
#serverSubHandles SubscriptionPolledRefresh
x))
    )

serverSubHandlesElement :: Text -> Text -> X.Element
serverSubHandlesElement :: Text -> Text -> Element
serverSubHandlesElement Text
elementName Text
x =
  QName -> [(QName, Content)] -> [Node] -> Element
X.element (Text -> QName
opcQName Text
elementName) [] [Content -> Node
X.contentNode (Text -> Content
X.textContent Text
x)]

subscriptionCancelElement :: Text -> SubscriptionCancel -> X.Element
subscriptionCancelElement :: Text -> SubscriptionCancel -> Element
subscriptionCancelElement Text
elementName SubscriptionCancel
x =
  QName -> [(QName, Content)] -> [Node] -> Element
X.element
    (Text -> QName
opcQName Text
elementName)
    ( [Maybe (QName, Content)] -> [(QName, Content)]
forall a. [Maybe a] -> [a]
catMaybes
        [ (QName
"ClientRequestHandle",) (Content -> (QName, Content))
-> (Text -> Content) -> Text -> (QName, Content)
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Text -> Content
X.textContent (Text -> (QName, Content)) -> Maybe Text -> Maybe (QName, Content)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IsLabel "clientRequestHandle" (SubscriptionCancel -> Maybe Text)
SubscriptionCancel -> Maybe Text
#clientRequestHandle SubscriptionCancel
x,
          (QName
"ServerSubHandle",) (Content -> (QName, Content))
-> (Text -> Content) -> Text -> (QName, Content)
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Text -> Content
X.textContent (Text -> (QName, Content)) -> Maybe Text -> Maybe (QName, Content)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IsLabel "serverSubHandle" (SubscriptionCancel -> Maybe Text)
SubscriptionCancel -> Maybe Text
#serverSubHandle SubscriptionCancel
x
        ]
    )
    [Node]
noContent

browseElement :: Text -> Browse -> X.Element
browseElement :: Text -> Browse -> Element
browseElement Text
elementName Browse
x =
  QName -> [(QName, Content)] -> [Node] -> Element
X.element
    (Text -> QName
opcQName Text
elementName)
    ( [Maybe (QName, Content)] -> [(QName, Content)]
forall a. [Maybe a] -> [a]
catMaybes
        [ (QName
"LocaleID",) (Content -> (QName, Content))
-> (Text -> Content) -> Text -> (QName, Content)
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Text -> Content
X.textContent (Text -> (QName, Content)) -> Maybe Text -> Maybe (QName, Content)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IsLabel "localeId" (Browse -> Maybe Text)
Browse -> Maybe Text
#localeId Browse
x,
          (QName
"ClientRequestHandle",) (Content -> (QName, Content))
-> (Text -> Content) -> Text -> (QName, Content)
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Text -> Content
X.textContent (Text -> (QName, Content)) -> Maybe Text -> Maybe (QName, Content)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IsLabel "clientRequestHandle" (Browse -> Maybe Text)
Browse -> Maybe Text
#clientRequestHandle Browse
x,
          (QName
"ItemPath",) (Content -> (QName, Content))
-> (Text -> Content) -> Text -> (QName, Content)
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Text -> Content
X.textContent (Text -> (QName, Content)) -> Maybe Text -> Maybe (QName, Content)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IsLabel "itemPath" (Browse -> Maybe Text)
Browse -> Maybe Text
#itemPath Browse
x,
          (QName
"ItemName",) (Content -> (QName, Content))
-> (Text -> Content) -> Text -> (QName, Content)
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Text -> Content
X.textContent (Text -> (QName, Content)) -> Maybe Text -> Maybe (QName, Content)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IsLabel "itemName" (Browse -> Maybe Text)
Browse -> Maybe Text
#itemName Browse
x,
          (QName
"ContinuationPoint",) (Content -> (QName, Content))
-> (Text -> Content) -> Text -> (QName, Content)
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Text -> Content
X.textContent (Text -> (QName, Content)) -> Maybe Text -> Maybe (QName, Content)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IsLabel "continuationPoint" (Browse -> Maybe Text)
Browse -> Maybe Text
#continuationPoint Browse
x,
          (QName, Content) -> Maybe (QName, Content)
forall (f :: * -> *) a. Applicative f => a -> f a
pure (QName
"MaxElementsReturned", Int32 -> Content
intContent (IsLabel "maxElementsReturned" (Browse -> Int32)
Browse -> Int32
#maxElementsReturned Browse
x)),
          (QName, Content) -> Maybe (QName, Content)
forall (f :: * -> *) a. Applicative f => a -> f a
pure (QName
"BrowseFilter", BrowseFilter -> Content
browseFilterContent (IsLabel "browseFilter" (Browse -> BrowseFilter)
Browse -> BrowseFilter
#browseFilter Browse
x)),
          (QName
"ElementNameFilter",) (Content -> (QName, Content))
-> (Text -> Content) -> Text -> (QName, Content)
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Text -> Content
X.textContent (Text -> (QName, Content)) -> Maybe Text -> Maybe (QName, Content)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IsLabel "elementNameFilter" (Browse -> Maybe Text)
Browse -> Maybe Text
#elementNameFilter Browse
x,
          (QName
"VendorFilter",) (Content -> (QName, Content))
-> (Text -> Content) -> Text -> (QName, Content)
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Text -> Content
X.textContent (Text -> (QName, Content)) -> Maybe Text -> Maybe (QName, Content)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IsLabel "vendorFilter" (Browse -> Maybe Text)
Browse -> Maybe Text
#vendorFilter Browse
x,
          (QName, Content) -> Maybe (QName, Content)
forall (f :: * -> *) a. Applicative f => a -> f a
pure (QName
"ReturnAllProperties", Bool -> Content
booleanContent (IsLabel "returnAllProperties" (Browse -> Bool)
Browse -> Bool
#returnAllProperties Browse
x)),
          (QName, Content) -> Maybe (QName, Content)
forall (f :: * -> *) a. Applicative f => a -> f a
pure (QName
"ReturnPropertyValues", Bool -> Content
booleanContent (IsLabel "returnPropertyValues" (Browse -> Bool)
Browse -> Bool
#returnPropertyValues Browse
x)),
          (QName, Content) -> Maybe (QName, Content)
forall (f :: * -> *) a. Applicative f => a -> f a
pure (QName
"ReturnErrorText", Bool -> Content
booleanContent (IsLabel "returnErrorText" (Browse -> Bool)
Browse -> Bool
#returnErrorText Browse
x))
        ]
    )
    (Element -> Node
X.elementNode (Element -> Node) -> (QName -> Element) -> QName -> Node
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Text -> QName -> Element
propertyNameElement Text
"PropertyNames" (QName -> Node) -> [QName] -> [Node]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Vector QName -> [Item (Vector QName)]
forall l. IsList l => l -> [Item l]
toList (IsLabel "propertyNames" (Browse -> Vector QName)
Browse -> Vector QName
#propertyNames Browse
x))

propertyNameElement :: Text -> QName -> X.Element
propertyNameElement :: Text -> QName -> Element
propertyNameElement Text
elementName QName
x =
  QName -> [(QName, Content)] -> [Node] -> Element
X.element
    (Text -> QName
opcQName Text
elementName)
    []
    [Content -> Node
X.contentNode (QName -> Content
qNameContent QName
x)]

getPropertiesElement :: Text -> GetProperties -> X.Element
getPropertiesElement :: Text -> GetProperties -> Element
getPropertiesElement Text
elementName GetProperties
x =
  QName -> [(QName, Content)] -> [Node] -> Element
X.element
    (Text -> QName
opcQName Text
elementName)
    ( [Maybe (QName, Content)] -> [(QName, Content)]
forall a. [Maybe a] -> [a]
catMaybes
        [ (QName
"LocaleID",) (Content -> (QName, Content))
-> (Text -> Content) -> Text -> (QName, Content)
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Text -> Content
X.textContent (Text -> (QName, Content)) -> Maybe Text -> Maybe (QName, Content)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IsLabel "localeId" (GetProperties -> Maybe Text)
GetProperties -> Maybe Text
#localeId GetProperties
x,
          (QName
"ClientRequestHandle",) (Content -> (QName, Content))
-> (Text -> Content) -> Text -> (QName, Content)
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Text -> Content
X.textContent (Text -> (QName, Content)) -> Maybe Text -> Maybe (QName, Content)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IsLabel "clientRequestHandle" (GetProperties -> Maybe Text)
GetProperties -> Maybe Text
#clientRequestHandle GetProperties
x,
          (QName
"ItemPath",) (Content -> (QName, Content))
-> (Text -> Content) -> Text -> (QName, Content)
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Text -> Content
X.textContent (Text -> (QName, Content)) -> Maybe Text -> Maybe (QName, Content)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IsLabel "itemPath" (GetProperties -> Maybe Text)
GetProperties -> Maybe Text
#itemPath GetProperties
x,
          (QName, Content) -> Maybe (QName, Content)
forall a. a -> Maybe a
Just (QName
"ReturnAllProperties", Bool -> Content
booleanContent (IsLabel "returnAllProperties" (GetProperties -> Bool)
GetProperties -> Bool
#returnAllProperties GetProperties
x)),
          (QName, Content) -> Maybe (QName, Content)
forall a. a -> Maybe a
Just (QName
"ReturnPropertyValues", Bool -> Content
booleanContent (IsLabel "returnPropertyValues" (GetProperties -> Bool)
GetProperties -> Bool
#returnPropertyValues GetProperties
x)),
          (QName, Content) -> Maybe (QName, Content)
forall a. a -> Maybe a
Just (QName
"ReturnErrorText", Bool -> Content
booleanContent (IsLabel "returnErrorText" (GetProperties -> Bool)
GetProperties -> Bool
#returnErrorText GetProperties
x))
        ]
    )
    ( [[Node]] -> [Node]
forall a. Monoid a => [a] -> a
mconcat
        [ Element -> Node
X.elementNode (Element -> Node) -> (QName -> Element) -> QName -> Node
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Text -> QName -> Element
propertyNameElement Text
"PropertyNames" (QName -> Node) -> [QName] -> [Node]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Vector QName -> [Item (Vector QName)]
forall l. IsList l => l -> [Item l]
toList (IsLabel "propertyNames" (GetProperties -> Vector QName)
GetProperties -> Vector QName
#propertyNames GetProperties
x),
          Element -> Node
X.elementNode (Element -> Node)
-> (ItemIdentifier -> Element) -> ItemIdentifier -> Node
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Text -> ItemIdentifier -> Element
itemIdentifierElement Text
"ItemIDs" (ItemIdentifier -> Node) -> [ItemIdentifier] -> [Node]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Vector ItemIdentifier -> [Item (Vector ItemIdentifier)]
forall l. IsList l => l -> [Item l]
toList (IsLabel "itemIds" (GetProperties -> Vector ItemIdentifier)
GetProperties -> Vector ItemIdentifier
#itemIds GetProperties
x)
        ]
    )

itemIdentifierElement :: Text -> ItemIdentifier -> X.Element
itemIdentifierElement :: Text -> ItemIdentifier -> Element
itemIdentifierElement Text
elementName ItemIdentifier
x =
  QName -> [(QName, Content)] -> [Node] -> Element
X.element
    (Text -> QName
opcQName Text
elementName)
    ( [Maybe (QName, Content)] -> [(QName, Content)]
forall a. [Maybe a] -> [a]
catMaybes
        [ (QName
"ItemPath",) (Content -> (QName, Content))
-> (Text -> Content) -> Text -> (QName, Content)
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Text -> Content
X.textContent (Text -> (QName, Content)) -> Maybe Text -> Maybe (QName, Content)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IsLabel "itemPath" (ItemIdentifier -> Maybe Text)
ItemIdentifier -> Maybe Text
#itemPath ItemIdentifier
x,
          (QName
"ItemName",) (Content -> (QName, Content))
-> (Text -> Content) -> Text -> (QName, Content)
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Text -> Content
X.textContent (Text -> (QName, Content)) -> Maybe Text -> Maybe (QName, Content)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IsLabel "itemName" (ItemIdentifier -> Maybe Text)
ItemIdentifier -> Maybe Text
#itemName ItemIdentifier
x
        ]
    )
    [Node]
noContent

-- * Attributes

opcQualityAttributes :: OpcQuality -> [(X.QName, X.Content)]
opcQualityAttributes :: OpcQuality -> [(QName, Content)]
opcQualityAttributes OpcQuality
x =
  [ (QName
"QualityField", QualityBits -> Content
qualityBitsContent (IsLabel "qualityField" (OpcQuality -> QualityBits)
OpcQuality -> QualityBits
#qualityField OpcQuality
x)),
    (QName
"LimitField", LimitBits -> Content
limitBitsContent (IsLabel "limitField" (OpcQuality -> LimitBits)
OpcQuality -> LimitBits
#limitField OpcQuality
x)),
    (QName
"VendorField", Word8 -> Content
forall a. Show a => a -> Content
shownContent (IsLabel "vendorField" (OpcQuality -> Word8)
OpcQuality -> Word8
#vendorField OpcQuality
x))
  ]

-- * Content

shownContent :: Show a => a -> X.Content
shownContent :: a -> Content
shownContent = Text -> Content
X.textContent (Text -> Content) -> (a -> Text) -> a -> Content
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. String -> Text
forall a. IsString a => String -> a
fromString (String -> Text) -> (a -> String) -> a -> Text
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. a -> String
forall a. Show a => a -> String
show

stringContent :: Text -> X.Content
stringContent :: Text -> Content
stringContent = Text -> Content
X.textContent

booleanContent :: Bool -> X.Content
booleanContent :: Bool -> Content
booleanContent = Text -> Content
X.textContent (Text -> Content) -> (Bool -> Text) -> Bool -> Content
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Text -> Text -> Bool -> Text
forall a. a -> a -> Bool -> a
bool Text
"false" Text
"true"

floatContent :: Float -> X.Content
floatContent :: Float -> Content
floatContent = Float -> Content
forall a. Show a => a -> Content
shownContent

doubleContent :: Double -> X.Content
doubleContent :: Double -> Content
doubleContent = Double -> Content
forall a. Show a => a -> Content
shownContent

decimalContent :: Scientific -> X.Content
decimalContent :: Scientific -> Content
decimalContent = Scientific -> Content
forall a. Show a => a -> Content
shownContent

longContent :: Int64 -> X.Content
longContent :: Int64 -> Content
longContent = Int64 -> Content
forall a. Show a => a -> Content
shownContent

intContent :: Int32 -> X.Content
intContent :: Int32 -> Content
intContent = Int32 -> Content
forall a. Show a => a -> Content
shownContent

shortContent :: Int16 -> X.Content
shortContent :: Int16 -> Content
shortContent = Int16 -> Content
forall a. Show a => a -> Content
shownContent

byteContent :: Int8 -> X.Content
byteContent :: Int8 -> Content
byteContent = Int8 -> Content
forall a. Show a => a -> Content
shownContent

unsignedLongContent :: Word64 -> X.Content
unsignedLongContent :: Word64 -> Content
unsignedLongContent = Word64 -> Content
forall a. Show a => a -> Content
shownContent

unsignedIntContent :: Word32 -> X.Content
unsignedIntContent :: Word32 -> Content
unsignedIntContent = Word32 -> Content
forall a. Show a => a -> Content
shownContent

unsignedShortContent :: Word16 -> X.Content
unsignedShortContent :: Word16 -> Content
unsignedShortContent = Word16 -> Content
forall a. Show a => a -> Content
shownContent

unsignedByteContent :: Word8 -> X.Content
unsignedByteContent :: Word8 -> Content
unsignedByteContent = Word8 -> Content
forall a. Show a => a -> Content
shownContent

base64BinaryContent :: ByteString -> X.Content
base64BinaryContent :: ByteString -> Content
base64BinaryContent = Text -> Content
X.textContent (Text -> Content) -> (ByteString -> Text) -> ByteString -> Content
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. ByteString -> Text
Base64.encodeBase64

dateTimeContent :: UTCTime -> X.Content
dateTimeContent :: UTCTime -> Content
dateTimeContent = Text -> Content
X.textContent (Text -> Content) -> (UTCTime -> Text) -> UTCTime -> Content
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Builder -> Text
Tb.run (Builder -> Text) -> (UTCTime -> Builder) -> UTCTime -> Text
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. UTCTime -> Builder
XmlSchemaValuesRendering.dateTime

timeContent :: Time -> X.Content
timeContent :: Time -> Content
timeContent = Text -> Content
X.textContent (Text -> Content) -> (Time -> Text) -> Time -> Content
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Builder -> Text
Tb.run (Builder -> Text) -> (Time -> Builder) -> Time -> Text
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Time -> Builder
XmlSchemaValuesRendering.time

dateContent :: Date -> X.Content
dateContent :: Date -> Content
dateContent = Text -> Content
X.textContent (Text -> Content) -> (Date -> Text) -> Date -> Content
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Builder -> Text
Tb.run (Builder -> Text) -> (Date -> Builder) -> Date -> Text
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Date -> Builder
XmlSchemaValuesRendering.date

durationContent :: Duration -> X.Content
durationContent :: Duration -> Content
durationContent = Text -> Content
X.textContent (Text -> Content) -> (Duration -> Text) -> Duration -> Content
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Builder -> Text
Tb.run (Builder -> Text) -> (Duration -> Builder) -> Duration -> Text
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Duration -> Builder
XmlSchemaValuesRendering.duration

qNameContent :: QName -> X.Content
qNameContent :: QName -> Content
qNameContent = QName -> Content
X.qNameContent (QName -> Content) -> (QName -> QName) -> QName -> Content
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. QName -> QName
qNameQName

browseFilterContent :: BrowseFilter -> X.Content
browseFilterContent :: BrowseFilter -> Content
browseFilterContent = \case
  BrowseFilter
AllBrowseFilter -> Content
"all"
  BrowseFilter
BranchBrowseFilter -> Content
"branch"
  BrowseFilter
ItemBrowseFilter -> Content
"item"

qualityBitsContent :: QualityBits -> X.Content
qualityBitsContent :: QualityBits -> Content
qualityBitsContent = \case
  QualityBits
BadQualityBits -> Content
"bad"
  QualityBits
BadConfigurationErrorQualityBits -> Content
"badConfigurationError"
  QualityBits
BadNotConnectedQualityBits -> Content
"badNotConnected"
  QualityBits
BadDeviceFailureQualityBits -> Content
"badDeviceFailure"
  QualityBits
BadSensorFailureQualityBits -> Content
"badSensorFailure"
  QualityBits
BadLastKnownValueQualityBits -> Content
"badLastKnownValue"
  QualityBits
BadCommFailureQualityBits -> Content
"badCommFailure"
  QualityBits
BadOutOfServiceQualityBits -> Content
"badOutOfService"
  QualityBits
BadWaitingForInitialDataQualityBits -> Content
"badWaitingForInitialData"
  QualityBits
UncertainQualityBits -> Content
"uncertain"
  QualityBits
UncertainLastUsableValueQualityBits -> Content
"uncertainLastUsableValue"
  QualityBits
UncertainSensorNotAccurateQualityBits -> Content
"uncertainSensorNotAccurate"
  QualityBits
UncertainEUExceededQualityBits -> Content
"uncertainEUExceeded"
  QualityBits
UncertainSubNormalQualityBits -> Content
"uncertainSubNormal"
  QualityBits
GoodQualityBits -> Content
"good"
  QualityBits
GoodLocalOverrideQualityBits -> Content
"goodLocalOverride"

limitBitsContent :: LimitBits -> X.Content
limitBitsContent :: LimitBits -> Content
limitBitsContent = \case
  LimitBits
NoneLimitBits -> Content
"none"
  LimitBits
LowLimitBits -> Content
"low"
  LimitBits
HighLimitBits -> Content
"high"
  LimitBits
ConstantLimitBits -> Content
"constant"

-- * Names

soapEncQName :: Text -> X.QName
soapEncQName :: Text -> QName
soapEncQName =
  Text -> Text -> QName
X.namespacedQName Text
Ns.soapEnc

soapEnvQName :: Text -> X.QName
soapEnvQName :: Text -> QName
soapEnvQName =
  Text -> Text -> QName
X.namespacedQName Text
Ns.soapEnv

xsdQName :: Text -> X.QName
xsdQName :: Text -> QName
xsdQName =
  Text -> Text -> QName
X.namespacedQName Text
Ns.xsd

xsiQName :: Text -> X.QName
xsiQName :: Text -> QName
xsiQName =
  Text -> Text -> QName
X.namespacedQName Text
Ns.xsi

opcQName :: Text -> X.QName
opcQName :: Text -> QName
opcQName =
  Text -> Text -> QName
X.namespacedQName Text
Ns.opc

qNameQName :: QName -> X.QName
qNameQName :: QName -> QName
qNameQName = \case
  NamespacedQName Text
ns Text
name -> Text -> Text -> QName
X.namespacedQName Text
ns Text
name
  UnnamespacedQName Text
name -> Text -> QName
X.unnamespacedQName Text
name