packages feed

binary-ext 2.0.1 → 2.0.2

raw patch · 13 files changed

+66/−43 lines, 13 filesdep ~base

Dependency ranges changed: base

Files

binary-ext.cabal view
@@ -2,10 +2,10 @@ -- -- see: https://github.com/sol/hpack ----- hash: 2b14ea0ba0ef4c6bc5bea0c2bf4b212481d986cb9267ece31ab81e2b88c012b2+-- hash: adceab08b9d69285d6c3b663ac9de2e05f12135642f1815b44ac5933ec0db13d  name:           binary-ext-version:        2.0.1+version:        2.0.2 synopsis:       An alternate with strong-typed errors for `Data.Binary.Get` monad from `binary` package. description:    An alternate with strong-typed errors for `Data.Binary.Get` monad from `binary` package. category:       Data, Parsing@@ -45,7 +45,7 @@   ghc-options: -fmax-pmcheck-iterations=100000000 -Wall -fno-warn-unused-imports -fprint-potential-instances -fsimpl-tick-factor=110   build-depends:       attoparsec-    , base >=4.7 && <5+    , base >=4.11 && <5     , binary     , bytestring     , conduit >=1.3.0@@ -79,7 +79,7 @@   build-depends:       HUnit     , attoparsec-    , base >=4.7 && <5+    , base >=4.11 && <5     , binary     , binary-ext     , bytestring
src/Control/Monad/Error/Map.hs view
@@ -13,6 +13,24 @@ -- See the License for the specific language governing permissions and -- limitations under the License. --+-- | This module provides generic functions set useful for errortype-parameterized monads and monad transformers,+-- such as 'Data.Conduit.Parsers.Binary.Get.Get'.+-- Example:+--+-- > pSign :: Parser (Maybe Char) Bool+-- > pSign = do+-- >   c <- pChar ?>> return Nothing+-- >   case c of+-- >     '+' -> return False+-- >     '-' -> return True+-- >     x -> throwError (Just x)+-- >+-- > pSignedNumber :: Parser String Int+-- > pSignedNumber = do+-- >   is_negative <- fromMaybe False <$> option'' pSign+-- >   value <- foldl1 (\ !a !b -> a * 10 + b) <$> many1'' pDigit ?>> return "digit or sign expected"+-- >   return $ if is_negative then -value else value+  module Control.Monad.Error.Map   ( MonadMapError (..)
src/Data/Conduit/Parsers/Binary/Get.hs view
@@ -78,7 +78,7 @@ import qualified Data.ByteString as SB hiding (ByteString, head, last, init, tail) import Data.ByteString.Lazy (ByteString) import qualified Data.ByteString.Lazy as B hiding (ByteString, head, last, init, tail)-import Data.Conduit+import Data.Conduit hiding (ConduitM) import Data.Int import Data.Maybe import Data.Semigroup hiding (Option)@@ -93,7 +93,7 @@  instance (DecodingState s, DecodingToken s ~ S.ByteString, DecodingElemsRead s) => DefaultDecodingState s where --- | The shortening of 'GetT' for the most common use case.+-- | The shortening of 'GetT' for the most common use case of binary deserialization. type Get e a = forall s o m. (DefaultDecodingState s, Monad m) => GetT s S.ByteString o e m a  -- | Run a decoder presented as a 'Get' monad.
src/Data/Conduit/Parsers/Binary/Put.hs view
@@ -14,8 +14,8 @@ -- limitations under the License. -- --- | Despite binary's 'S.Put' is fully-functional construction (unlike 'S.Get'),--- we decided to provide this module for symmetry with 'Data.Binary.Conduit.Get'.+-- | Despite binary's 'S.Put' is fully-functional construction (unlike 'Data.Binary.Get.Get'),+-- we decided to provide this module for symmetry with 'Data.Conduit.Parsers.Binary.Get'.  module Data.Conduit.Parsers.Binary.Put   ( PutM@@ -67,7 +67,7 @@ import qualified Data.ByteString.Lazy as B hiding (ByteString, head, last, init, tail) import Data.ByteString.Short (ShortByteString) import qualified Data.ByteString.Short as HB hiding (ShortByteString)-import Data.Conduit+import Data.Conduit hiding (ConduitM) import Data.Int import Data.Word import Data.Conduit.Parsers.Binary@@ -78,7 +78,7 @@  instance (EncodingState s, EncodingToken s ~ Word64, EncodingBytesWrote s) => DefaultEncodingState s where --- | The shortening of 'PutM' for the most common use case.+-- | The shortening of 'PutM' for the most common use case of binary serialization. type Put = forall s i m. (DefaultEncodingState s, Monad m) => PutM s i S.ByteString m ()  -- | Run an encoder presented as a 'Put' monad.@@ -88,7 +88,8 @@ {-# INLINE runPut #-}  -- | Get the total number of bytes wrote to this point.--- Can be used with 'mfix' to result bytes count prediction:+-- Can be used with 'Control.Monad.Fix.mfix' to result bytes count prediction:+-- -- > putWithSize :: (DefaultEncodingState s, Monad m) => PutM s i S.ByteString m () -> PutM s i S.ByteString m () -- > putWithSize !p = void $ mfix $ \size -> do -- >   putWord64le size
src/Data/Conduit/Parsers/GetC.hs view
@@ -78,7 +78,7 @@ import qualified Control.Monad.Trans.State.Lazy as L import Control.Monad.Trans.Writer.Strict import qualified Control.Monad.Trans.Writer.Lazy as L-import Data.Conduit+import Data.Conduit hiding (ConduitM) import Data.Conduit.Lift import Data.Maybe hiding (fromJust) 
src/Data/Conduit/Parsers/PutS.hs view
@@ -32,8 +32,7 @@  import Control.Monad.Fix import Control.Monad.Trans.State.Strict-import Data.Conduit-import Data.Semigroup+import Data.Conduit hiding (ConduitM) import Data.String import qualified Data.Text as S (Text) @@ -84,7 +83,7 @@   a <> b = a >> b   {-# INLINE (<>) #-} --- | A 'ConduitT' with wrappers supposed to a binary serialization.+-- | A 'ConduitT' with wrappers supposed to a binary or text serialization. type PutM s i o m a = PutS s (ConduitT i o m) a  instance (EncodingState s, EncodingToken s ~ (), Monad m) => IsString (PutM s i S.Text m ()) where
src/Data/Conduit/Parsers/Text/Gen.hs view
@@ -31,7 +31,7 @@  import Data.Bits import Data.Char-import Data.Conduit+import Data.Conduit hiding (ConduitM) import qualified Data.Text as S (Text) import qualified Data.Text as ST hiding (Text, head, last, tail, init) import Data.Text.Lazy (Text)@@ -43,7 +43,7 @@  instance (EncodingState s, EncodingToken s ~ ()) => DefaultTextGenState s where --- | The shortening of 'PutM' for the most common use case.+-- | The shortening of 'PutM' for the most common use case of text serialization. type TextGen = forall s i m. (DefaultTextGenState s, Monad m) => PutM s i S.Text m ()  -- | Run an encoder presented as a 'PutM' monad.
src/Data/Conduit/Parsers/Text/Parser.hs view
@@ -14,16 +14,6 @@ -- limitations under the License. -- --- | At the first look, Data.Binary.Conduit.Get module is very similar with Data.Binary.Get.--- The main differences between them are the following.--- While the 'S.Get' from binary is a very custom monad,--- the local 'Get' is 'ConduitT', which leads to easy integration in complicated format parsing.--- The Data.Binary.Get module does not have a function to create custom 'S.Get' monad,--- this module provides 'getC'.--- Unlike 'isolate' from binary, local 'isolate' does not "cut" bytes counter.--- While the binary's 'S.Get' is 'MonadFail', which leads to very ugly errors handling--- in complicated cases, local 'Get' is 'MonadError'.- module Data.Conduit.Parsers.Text.Parser   ( MonadMapError (..)   , (?=>>)@@ -101,7 +91,7 @@ import qualified Data.Attoparsec.Text as Tp hiding (parse, parseOnly, Parser, Result, IResult, Done, Partial, Fail, inClass, notInClass, isEndOfLine, isHorizontalSpace) import Data.Bits import Data.Char-import Data.Conduit+import Data.Conduit hiding (ConduitM) import qualified Data.Conduit.Combinators as N import Data.List.NonEmpty hiding (take, takeWhile) import Data.NonNull hiding (head)@@ -120,7 +110,7 @@  instance (DecodingState s, DecodingToken s ~ S.Text, DecodingTextRead s) => DefaultParsingState s where --- | The shortening of 'GetT' for the most common use case.+-- | The shortening of 'GetT' for the most common use case of text deserialization. type Parser e a = forall s o m. (DefaultParsingState s, Monad m) => GetT s S.Text o e m a  -- | Run a decoder presented as a 'Get' monad.
src/Data/Conduit/Parsers/Text/TextOffset.hs view
@@ -14,16 +14,6 @@ -- limitations under the License. -- --- | At the first look, Data.Binary.Conduit.Get module is very similar with Data.Binary.Get.--- The main differences between them are the following.--- While the 'S.Get' from binary is a very custom monad,--- the local 'Get' is 'ConduitT', which leads to easy integration in complicated format parsing.--- The Data.Binary.Get module does not have a function to create custom 'S.Get' monad,--- this module provides 'getC'.--- Unlike 'isolate' from binary, local 'isolate' does not "cut" bytes counter.--- While the binary's 'S.Get' is 'MonadFail', which leads to very ugly errors handling--- in complicated cases, local 'Get' is 'MonadError'.- module Data.Conduit.Parsers.Text.TextOffset   ( TextOffset (..)   ) where
test/Data/Conduit/Parsers/Binary/Get/Spec.hs view
@@ -28,7 +28,7 @@ import qualified Data.ByteString as SB hiding (ByteString, head, last, init, tail) import Data.ByteString.Lazy (ByteString) import Data.Char-import Data.Conduit+import Data.Conduit hiding (ConduitM) import qualified Data.Conduit.Combinators as N import Data.Conduit.Lift import Data.Functor.Identity
test/Data/Conduit/Parsers/Binary/Put/Spec.hs view
@@ -24,7 +24,7 @@ import Control.Monad.Trans.Class import Data.Bits import qualified Data.ByteString as S (ByteString)-import Data.Conduit+import Data.Conduit hiding (ConduitM) import qualified Data.Conduit.Combinators as N import Test.HUnit.Base hiding (Label) import Data.Conduit.Parsers.Binary.Get
test/Data/Conduit/Parsers/Text/Gen/Spec.hs view
@@ -18,7 +18,7 @@   ( tests   ) where -import Data.Conduit+import Data.Conduit hiding (ConduitM) import qualified Data.Conduit.Combinators as N import Data.Functor.Identity import qualified Data.Text as S (Text)
test/Data/Conduit/Parsers/Text/Parser/Spec.hs view
@@ -18,9 +18,11 @@   ( tests   ) where -import Data.Conduit+import Control.Monad.Error.Class+import Data.Conduit hiding (ConduitM) import qualified Data.Conduit.Combinators as N import Data.Functor.Identity+import Data.Maybe import qualified Data.Text as S (Text) import Test.HUnit.Base hiding (Label) import Data.Conduit.Parsers.Binary.Get hiding (runGet)@@ -29,6 +31,7 @@ tests :: Test tests = TestList   [ TestCase testLinesRead+  , TestCase testSignedNumber   ]  testLinesRead :: Assertion@@ -67,3 +70,25 @@   , "au\nx"   , ""   ]++pSign :: Parser (Maybe Char) Bool+pSign = do+  c <- pChar ?>> return Nothing+  case c of+    '+' -> return False+    '-' -> return True+    x -> throwError (Just x)++pSignedNumber :: Parser String Int+pSignedNumber = do+  is_negative <- fromMaybe False <$> option'' pSign+  value <- foldl1 (\ !a !b -> a * 10 + b) <$> many1'' pDigit ?>> return "digit or sign expected"+  return $ if is_negative then -value else value++testSignedNumber :: Assertion+testSignedNumber = do+  assertEqual "" (Right 145) $ runIdentity $ yield "145" `connect` runParser pSignedNumber+  assertEqual "" (Right 32) $ runIdentity $ yield "+32" `connect` runParser pSignedNumber+  assertEqual "" (Right (-7)) $ runIdentity $ yield "-7" `connect` runParser pSignedNumber+  assertEqual "" (Left "digit or sign expected") $ runIdentity $ yield "abc" `connect` runParser pSignedNumber+  assertEqual "" (Left "digit or sign expected") $ runIdentity $ yield "-abc" `connect` runParser pSignedNumber