summaryrefslogtreecommitdiffhomepage
path: root/Network/DNS/StateBinary.hs
diff options
context:
space:
mode:
Diffstat (limited to 'Network/DNS/StateBinary.hs')
-rw-r--r--Network/DNS/StateBinary.hs8
1 files changed, 6 insertions, 2 deletions
diff --git a/Network/DNS/StateBinary.hs b/Network/DNS/StateBinary.hs
index 05f8468..e44ee98 100644
--- a/Network/DNS/StateBinary.hs
+++ b/Network/DNS/StateBinary.hs
@@ -5,6 +5,7 @@ import Control.Applicative
import Control.Monad.State
import Data.Attoparsec
import Data.Attoparsec.Enumerator
+import qualified Data.Attoparsec.Lazy as AL
import Data.ByteString (ByteString)
import qualified Data.ByteString as BS (unpack)
import qualified Data.ByteString.Lazy as BL (ByteString)
@@ -114,8 +115,11 @@ getNByteString n = lift (take n) <* addPosition n
initialState :: PState
initialState = PState IM.empty 0
-runSGet :: SGet a -> Iteratee ByteString IO (a, PState)
-runSGet parser = iterParser (runStateT parser initialState)
+iterSGet :: Monad m => SGet a -> Iteratee ByteString m (a, PState)
+iterSGet parser = iterParser (runStateT parser initialState)
+
+runSGet :: SGet a -> BL.ByteString -> Either String (a, PState)
+runSGet parser bs = AL.eitherResult $ AL.parse (runStateT parser initialState) bs
runSPut :: SPut -> BL.ByteString
runSPut = toLazyByteString . fromWrite