asif 4.0.1 → 4.1.0
raw patch · 3 files changed
+114/−75 lines, 3 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
+ Arbor.File.Format.Asif.Extract: listLazy :: Get a -> ByteString -> [Either String a]
Files
- asif.cabal +60/−61
- src/Arbor/File/Format/Asif/Extract.hs +24/−14
- test/Arbor/File/Format/Asif/ExtractSpec.hs +30/−0
asif.cabal view
@@ -1,10 +1,7 @@--- This file has been generated from package.yaml by hpack version 0.18.1.------ see: https://github.com/sol/hpack- name: asif-version: 4.0.1-description: Please see the README on Github at <https://github.com/packetloop/asif#readme>+version: 4.1.0+description: Library for creating and querying segmented feeds. Please see <https://github.com/packetloop/asif#readme>+synopsis: Library for creating and querying segmented feeds category: Services homepage: https://github.com/packetloop/asif#readme bug-reports: https://github.com/packetloop/asif/issues@@ -15,7 +12,6 @@ license-file: LICENSE build-type: Simple cabal-version: >= 1.10- extra-source-files: ChangeLog.md README.md@@ -25,37 +21,6 @@ location: https://github.com/packetloop/asif library- hs-source-dirs:- src- default-extensions: BangPatterns FlexibleContexts FlexibleInstances GeneralizedNewtypeDeriving MultiParamTypeClasses OverloadedStrings TupleSections- ghc-options: -Wall -Wcompat -Wincomplete-record-updates -Wincomplete-uni-patterns -Wredundant-constraints- build-depends:- base >= 4.7 && < 5- , attoparsec- , binary- , bytestring- , conduit- , conduit-combinators- , conduit-extra- , containers- , cpu- , either- , exceptions- , foldl- , generic-lens- , hw-bits- , hw-ip- , iproute- , lens- , network- , old-locale- , profunctors- , resourcet- , temporary-resourcet- , text- , thyme- , transformers- , vector exposed-modules: Arbor.File.Format.Asif Arbor.File.Format.Asif.ByIndex@@ -81,17 +46,13 @@ Arbor.File.Format.Asif.Maybe Arbor.File.Format.Asif.Text Paths_asif- default-language: Haskell2010--executable asif- main-is: Main.hs hs-source-dirs:- app+ src default-extensions: BangPatterns FlexibleContexts FlexibleInstances GeneralizedNewtypeDeriving MultiParamTypeClasses OverloadedStrings TupleSections- ghc-options: -Wall -Wcompat -Wincomplete-record-updates -Wincomplete-uni-patterns -Wredundant-constraints -threaded -rtsopts -O2 -msse4.2+ ghc-options: -Wall -Wcompat -Wincomplete-record-updates -Wincomplete-uni-patterns -Wredundant-constraints build-depends:- base >= 4.7 && < 5- , attoparsec+ attoparsec+ , base >=4.7 && <5 , binary , bytestring , conduit@@ -116,9 +77,10 @@ , thyme , transformers , vector- , asif- , directory- , optparse-applicative+ default-language: Haskell2010++executable asif+ main-is: Main.hs other-modules: App.Commands App.Commands.Dump@@ -131,18 +93,15 @@ App.Commands.Options.Type App.Dump App.IO- default-language: Haskell2010--test-suite asif-test- type: exitcode-stdio-1.0- main-is: Spec.hs+ Paths_asif hs-source-dirs:- test+ app default-extensions: BangPatterns FlexibleContexts FlexibleInstances GeneralizedNewtypeDeriving MultiParamTypeClasses OverloadedStrings TupleSections- ghc-options: -threaded -rtsopts -with-rtsopts=-N+ ghc-options: -Wall -Wcompat -Wincomplete-record-updates -Wincomplete-uni-patterns -Wredundant-constraints -threaded -rtsopts -O2 -msse4.2 build-depends:- base >= 4.7 && < 5+ asif , attoparsec+ , base >=4.7 && <5 , binary , bytestring , conduit@@ -150,6 +109,7 @@ , conduit-extra , containers , cpu+ , directory , either , exceptions , foldl@@ -160,6 +120,7 @@ , lens , network , old-locale+ , optparse-applicative , profunctors , resourcet , temporary-resourcet@@ -167,13 +128,15 @@ , thyme , transformers , vector- , asif- , hspec- , hedgehog- , hw-hspec-hedgehog+ default-language: Haskell2010++test-suite asif-test+ type: exitcode-stdio-1.0+ main-is: Spec.hs other-modules: Arbor.File.Format.Asif.ByteString.BuilderSpec Arbor.File.Format.Asif.Data.IpSpec+ Arbor.File.Format.Asif.ExtractSpec Arbor.File.Format.Asif.Format.SegmentValueSpec Arbor.File.Format.Asif.Format.TextSpec Arbor.File.Format.Asif.WriteSpec@@ -181,4 +144,40 @@ Arbor.TestUtils Gen.Feed TestApp+ Paths_asif+ hs-source-dirs:+ test+ default-extensions: BangPatterns FlexibleContexts FlexibleInstances GeneralizedNewtypeDeriving MultiParamTypeClasses OverloadedStrings TupleSections+ ghc-options: -threaded -rtsopts -with-rtsopts=-N+ build-depends:+ asif+ , attoparsec+ , base >=4.7 && <5+ , binary+ , bytestring+ , conduit+ , conduit-combinators+ , conduit-extra+ , containers+ , cpu+ , either+ , exceptions+ , foldl+ , generic-lens+ , hedgehog+ , hspec+ , hw-bits+ , hw-hspec-hedgehog+ , hw-ip+ , iproute+ , lens+ , network+ , old-locale+ , profunctors+ , resourcet+ , temporary-resourcet+ , text+ , thyme+ , transformers+ , vector default-language: Haskell2010
src/Arbor/File/Format/Asif/Extract.hs view
@@ -8,26 +8,28 @@ module Arbor.File.Format.Asif.Extract ( formats , list+ , listLazy , map , vectorBoxed , vectorUnboxed ) where -import Arbor.File.Format.Asif.Format.Type (Format)-import Arbor.File.Format.Asif.Whatever-import Control.Lens-import Data.Binary.Get-import Data.List hiding (map)-import Data.Text (Text)-import Data.Text.Encoding (decodeUtf8')-import Data.Text.Encoding.Error-import Prelude hiding (map)+import Arbor.File.Format.Asif.Format.Type (Format)+import Arbor.File.Format.Asif.Whatever+import Control.Lens+import Data.Binary.Get+import Data.List hiding (map)+import Data.Text (Text)+import Data.Text.Encoding (decodeUtf8')+import Data.Text.Encoding.Error+import Prelude hiding (map) -import qualified Data.Binary.Get as G-import qualified Data.ByteString.Lazy as LBS-import qualified Data.Map.Strict as M-import qualified Data.Vector as V-import qualified Data.Vector.Unboxed as VU+import qualified Data.Binary.Get as G+import qualified Data.ByteString.Lazy as LBS+import qualified Data.List as L+import qualified Data.Map.Strict as M+import qualified Data.Vector as V+import qualified Data.Vector.Unboxed as VU vectorBoxed :: Get a -> LBS.ByteString -> V.Vector a vectorBoxed g = V.unfoldr step@@ -48,6 +50,14 @@ if not empty then (:) <$> g <*> go else return []++listLazy :: Get a -> LBS.ByteString -> [Either String a]+listLazy g bs =+ flip L.unfoldr bs $ \acc ->+ if LBS.null acc then Nothing+ else case runGetOrFail g acc of+ Left (_, _, err) -> Just (Left err, LBS.empty)+ Right (bs', _, a) -> Just (Right a, bs') map :: (Ord a) => LBS.ByteString -> Get a -> LBS.ByteString -> Get b -> M.Map a b map ks kf vs vf = foldr (\(k, v) m -> M.insert k v m) M.empty $ zip keys values
+ test/Arbor/File/Format/Asif/ExtractSpec.hs view
@@ -0,0 +1,30 @@+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE ScopedTypeVariables #-}++module Arbor.File.Format.Asif.ExtractSpec+ ( spec+ ) where++import Arbor.File.Format.Asif.Extract+import Control.Lens++import qualified Data.Binary.Get as G+import qualified Data.ByteString.Builder as BB+import qualified Data.ByteString.Lazy as LBS++import HaskellWorks.Hspec.Hedgehog+import Hedgehog+import Test.Hspec++import qualified Data.List as L+import qualified Hedgehog.Gen as Gen+import qualified Hedgehog.Range as Range++{-# ANN module ("HLint: ignore Redundant do" :: String) #-}++spec :: Spec+spec = describe "Arbor.File.Format.Asif.ExtractSpec" $ do+ it "listLazy should extract correct values" $ require $ property $ do+ ts <- forAll $ Gen.list (Range.linear 0 20) (Gen.int64 (Range.linear 0 maxBound))+ let body = ts <&> BB.int64LE & mconcat & BB.toLazyByteString+ listLazy G.getInt64le body === fmap Right ts