module Network.SOAP.Parsing.Stream
(
laxTag, flaxTag
, laxContent, flaxContent
, readContent, readTag
, Sink, Event
) where
#if MIN_VERSION_conduit(1,1,0)
import Control.Monad.Catch (MonadThrow)
#endif
import Data.Conduit
import Data.XML.Types (Event)
import Text.XML (Name(..))
import qualified Text.XML.Stream.Parse as XSP
import Data.Text (Text, unpack)
laxTag :: (MonadThrow m) => Text -> Sink Event m a -> Sink Event m (Maybe a)
laxTag ln = XSP.tagPredicate ((== ln) . nameLocalName) XSP.ignoreAttrs . const
flaxTag :: (MonadThrow m) => Text -> Sink Event m a -> Sink Event m a
flaxTag ln s = XSP.force ("got no " ++ show ln) $ laxTag ln s
laxContent :: (MonadThrow m) => Text -> Sink Event m (Maybe Text)
laxContent ln = laxTag ln XSP.content
flaxContent :: (MonadThrow m) => Text -> Sink Event m Text
flaxContent ln = flaxTag ln XSP.content
readContent :: (Read a, MonadThrow m) => Sink Event m a
readContent = fmap (read . unpack) XSP.content
readTag :: (Read a, MonadThrow m) => Text -> Sink Event m a
readTag n = flaxTag n readContent