module XmlParser.NodeConsumerState
  ( NodeConsumerState,
    new,
    bumpOffset,
    getOffset,
    fetchNode,
    lookupNamespace,
    getNamespaceRegistry,
  )
where
import qualified Text.XML as Xml
import qualified XmlParser.NamespaceRegistry as NamespaceRegistry
import XmlParser.Prelude
data NodeConsumerState
  = NodeConsumerState
      [Xml.Node]
      
      Int
      
      NamespaceRegistry.NamespaceRegistry
      
new :: [Xml.Node] -> NamespaceRegistry.NamespaceRegistry -> NodeConsumerState
new :: [Node] -> NamespaceRegistry -> NodeConsumerState
new [Node]
nodes NamespaceRegistry
nsReg = [Node] -> Int -> NamespaceRegistry -> NodeConsumerState
NodeConsumerState [Node]
nodes Int
0 NamespaceRegistry
nsReg
bumpOffset :: NodeConsumerState -> NodeConsumerState
bumpOffset :: NodeConsumerState -> NodeConsumerState
bumpOffset (NodeConsumerState [Node]
a Int
b NamespaceRegistry
c) = [Node] -> Int -> NamespaceRegistry -> NodeConsumerState
NodeConsumerState [Node]
a (forall a. Enum a => a -> a
succ Int
b) NamespaceRegistry
c
getOffset :: NodeConsumerState -> Int
getOffset :: NodeConsumerState -> Int
getOffset (NodeConsumerState [Node]
_ Int
x NamespaceRegistry
_) = Int
x
fetchNode :: NodeConsumerState -> Maybe (Xml.Node, NodeConsumerState)
fetchNode :: NodeConsumerState -> Maybe (Node, NodeConsumerState)
fetchNode (NodeConsumerState [Node]
nodes Int
offset NamespaceRegistry
nsReg) =
  case [Node]
nodes of
    Node
nodesHead : [Node]
nodesTail -> forall a. a -> Maybe a
Just (Node
nodesHead, [Node] -> Int -> NamespaceRegistry -> NodeConsumerState
NodeConsumerState [Node]
nodesTail Int
offset NamespaceRegistry
nsReg)
    [Node]
_ -> forall a. Maybe a
Nothing
lookupNamespace :: Text -> NodeConsumerState -> Maybe Text
lookupNamespace :: Text -> NodeConsumerState -> Maybe Text
lookupNamespace Text
ns (NodeConsumerState [Node]
_ Int
_ NamespaceRegistry
nsReg) =
  Text -> NamespaceRegistry -> Maybe Text
NamespaceRegistry.lookup Text
ns NamespaceRegistry
nsReg
getNamespaceRegistry :: NodeConsumerState -> NamespaceRegistry.NamespaceRegistry
getNamespaceRegistry :: NodeConsumerState -> NamespaceRegistry
getNamespaceRegistry (NodeConsumerState [Node]
_ Int
_ NamespaceRegistry
x) = NamespaceRegistry
x