asif 5.0.2 → 6.0.0
raw patch · 5 files changed
+76/−77 lines, 5 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
- Arbor.File.Format.Asif.Format.Decoder: getBool :: Get Bool
- Arbor.File.Format.Asif.Format.Decoder: getIpv4 :: Get IpAddress
- Arbor.File.Format.Asif.Format.Decoder: getIpv4Block :: Get (IpBlock Canonical)
- Arbor.File.Format.Asif.Format.Decoder: getIpv6 :: Get IpAddress
- Arbor.File.Format.Asif.Format.Decoder: getIpv6Block :: Get (IpBlock Canonical)
- Arbor.File.Format.Asif.Format.Decoder: getTimeMicros :: Get UTCTime
- Arbor.File.Format.Asif.Format.Decoder: getTimeMillis :: Get UTCTime
- Arbor.File.Format.Asif.Format.Decoder: getWord32x4 :: Get (Word32, Word32, Word32, Word32)
+ Arbor.File.Format.Asif.Get: getBool :: Get Bool
+ Arbor.File.Format.Asif.Get: getIpv4 :: Get IpAddress
+ Arbor.File.Format.Asif.Get: getIpv4Block :: Get (IpBlock Canonical)
+ Arbor.File.Format.Asif.Get: getIpv6 :: Get IpAddress
+ Arbor.File.Format.Asif.Get: getIpv6Block :: Get (IpBlock Canonical)
+ Arbor.File.Format.Asif.Get: getNullTerminatedString :: Get ByteString
+ Arbor.File.Format.Asif.Get: getTimeMicros :: Get UTCTime
+ Arbor.File.Format.Asif.Get: getTimeMillis :: Get UTCTime
+ Arbor.File.Format.Asif.Get: getWord32x4 :: Get (Word32, Word32, Word32, Word32)
Files
- app/App/Dump.hs +10/−10
- asif.cabal +1/−2
- src/Arbor/File/Format/Asif/Format/Decoder.hs +0/−48
- src/Arbor/File/Format/Asif/Format/SegmentValue.hs +13/−12
- src/Arbor/File/Format/Asif/Get.hs +52/−5
app/App/Dump.hs view
@@ -9,29 +9,29 @@ ) where import Arbor.File.Format.Asif.Data.Ip-import Arbor.File.Format.Asif.Format.Decoder as D import Arbor.File.Format.Asif.Segment import Arbor.File.Format.Asif.Whatever import Control.Lens import Control.Monad-import Control.Monad.IO.Class (liftIO)-import Control.Monad.Trans.Resource (MonadResource)-import Data.Char (isPrint)+import Control.Monad.IO.Class (liftIO)+import Control.Monad.Trans.Resource (MonadResource)+import Data.Char (isPrint) import Data.Generics.Product.Any import Data.List-import Data.Monoid ((<>))-import Data.Text (Text)-import Data.Thyme.Format (formatTime)+import Data.Monoid ((<>))+import Data.Text (Text)+import Data.Thyme.Format (formatTime) import Data.Thyme.Time.Core import Data.Word import HaskellWorks.Data.Bits.BitShow import HaskellWorks.Data.Bits.BitWise-import Numeric (showHex)-import System.IO (Handle)-import System.Locale (defaultTimeLocale, iso8601DateFormat)+import Numeric (showHex)+import System.IO (Handle)+import System.Locale (defaultTimeLocale, iso8601DateFormat) import qualified Arbor.File.Format.Asif.ByteString.Lazy as LBS import qualified Arbor.File.Format.Asif.Format as F+import qualified Arbor.File.Format.Asif.Get as D import qualified Data.Binary as G import qualified Data.Binary.Get as G import qualified Data.Bits as B
asif.cabal view
@@ -1,6 +1,6 @@ cabal-version: 2.2 name: asif-version: 5.0.2+version: 6.0.0 description: Library for creating and querying segmented feeds. Please see <https://github.com/arbor/asif#readme> synopsis: Library for creating and querying segmented feeds category: Services@@ -71,7 +71,6 @@ Arbor.File.Format.Asif.Type Arbor.File.Format.Asif.Whatever Arbor.File.Format.Asif.Write- Arbor.File.Format.Asif.Format.Decoder other-modules: Arbor.File.Format.Asif.Format.SegmentValue Arbor.File.Format.Asif.Format.Type
− src/Arbor/File/Format/Asif/Format/Decoder.hs
@@ -1,48 +0,0 @@-module Arbor.File.Format.Asif.Format.Decoder where--import Arbor.File.Format.Asif.Data.Ip-import Control.Lens-import Data.Thyme.Time.Core-import Data.Word (Word32)-import HaskellWorks.Data.Network.Ip.Validity (Canonical)--import qualified Data.Binary.Get as G-import qualified HaskellWorks.Data.Network.Ip.Ipv4 as IP4-import qualified HaskellWorks.Data.Network.Ip.Ipv6 as IP6--getWord32x4 :: G.Get (Word32, Word32, Word32, Word32)-getWord32x4 = do- a <- G.getWord32be- b <- G.getWord32be- c <- G.getWord32be- d <- G.getWord32be- return (a, b, c, d)--getBool :: G.Get Bool-getBool = G.getWord8 <&> (/= 0)--getIpv4 :: G.Get IP4.IpAddress-getIpv4 = G.getWord32le <&> word32ToIpv4--getIpv6 :: G.Get IP6.IpAddress-getIpv6 = getWord32x4 <&> word32x4ToIpv6--getIpv4Block :: G.Get (IP4.IpBlock Canonical)-getIpv4Block =- let toIpBlock w32 w8 = IP4.IpBlock (IP4.IpAddress w32) (IP4.IpNetMask w8)- in toIpBlock <$> G.getWord32le <*> G.getWord8--getIpv6Block :: G.Get (IP6.IpBlock Canonical)-getIpv6Block =- let toIpBlock w128 w8 = IP6.IpBlock (IP6.IpAddress w128) (IP6.IpNetMask w8)- in toIpBlock <$> getWord32x4 <*> G.getWord8--getTimeMillis :: G.Get UTCTime-getTimeMillis =- let toTime ms = (ms * 1000) ^. from microseconds & posixSecondsToUTCTime- in G.getInt64le <&> toTime--getTimeMicros :: G.Get UTCTime-getTimeMicros =- let toTime ms = ms ^. from microseconds & posixSecondsToUTCTime- in G.getInt64le <&> toTime
src/Arbor/File/Format/Asif/Format/SegmentValue.hs view
@@ -6,27 +6,28 @@ module Arbor.File.Format.Asif.Format.SegmentValue where +import Arbor.File.Format.Asif.List as L+import Arbor.File.Format.Asif.Segment+import Arbor.File.Format.Asif.Whatever+import Control.Lens+import Data.Generics.Product.Any+import Data.Int+import Data.Semigroup ((<>))+import Data.Thyme.Time.Core+import Data.Word+import GHC.Generics (Generic)+import HaskellWorks.Data.Network.Ip.Validity+ import qualified Arbor.File.Format.Asif.ByteString.Lazy as LBS-import Arbor.File.Format.Asif.Format.Decoder as D import qualified Arbor.File.Format.Asif.Format.Type as F-import Arbor.File.Format.Asif.List as L-import Arbor.File.Format.Asif.Segment-import Arbor.File.Format.Asif.Whatever-import Control.Lens+import qualified Arbor.File.Format.Asif.Get as D import qualified Data.Binary as G import qualified Data.Binary.Get as G import qualified Data.ByteString.Lazy as LBS import qualified Data.ByteString.Lazy.Char8 as LBSC-import Data.Generics.Product.Any-import Data.Int-import Data.Semigroup ((<>)) import qualified Data.Text as T-import Data.Thyme.Time.Core-import Data.Word-import GHC.Generics (Generic) import qualified HaskellWorks.Data.Network.Ip.Ipv4 as IP4 import qualified HaskellWorks.Data.Network.Ip.Ipv6 as IP6-import HaskellWorks.Data.Network.Ip.Validity data SegmentValue = SString LBS.ByteString
src/Arbor/File/Format/Asif/Get.hs view
@@ -1,6 +1,7 @@ module Arbor.File.Format.Asif.Get where import Arbor.File.Format.Asif.ByteString.Builder+import Arbor.File.Format.Asif.Data.Ip (word32ToIpv4, word32x4ToIpv6) import Control.Lens import Control.Monad import Data.Binary.Get@@ -8,12 +9,17 @@ import Data.Text (Text) import Data.Thyme.Clock (microseconds) import Data.Thyme.Clock.POSIX (POSIXTime)+import Data.Thyme.Time.Core (UTCTime, posixSecondsToUTCTime)+import Data.Word (Word32)+import HaskellWorks.Data.Network.Ip.Validity (Canonical) -import qualified Data.Attoparsec.ByteString as AP-import qualified Data.ByteString as BS-import qualified Data.ByteString.Lazy as LBS-import qualified Data.ByteString.Lazy.Char8 as LC8-import qualified Data.Text.Encoding as T+import qualified Data.Attoparsec.ByteString as AP+import qualified Data.ByteString as BS+import qualified Data.ByteString.Lazy as LBS+import qualified Data.ByteString.Lazy.Char8 as LC8+import qualified Data.Text.Encoding as T+import qualified HaskellWorks.Data.Network.Ip.Ipv4 as IP4+import qualified HaskellWorks.Data.Network.Ip.Ipv6 as IP6 getMagic :: AP.Parser BS.ByteString -> Get () getMagic magicParser = do@@ -43,5 +49,46 @@ getTimeMicro64 :: Get POSIXTime getTimeMicro64 = (^. from microseconds) <$> getInt64le +getTimeMillis :: Get UTCTime+getTimeMillis =+ let toTime ms = (ms * 1000) ^. from microseconds & posixSecondsToUTCTime+ in getInt64le <&> toTime++getTimeMicros :: Get UTCTime+getTimeMicros =+ let toTime ms = ms ^. from microseconds & posixSecondsToUTCTime+ in getInt64le <&> toTime++getWord32x4 :: Get (Word32, Word32, Word32, Word32)+getWord32x4 = do+ a <- getWord32be+ b <- getWord32be+ c <- getWord32be+ d <- getWord32be+ return (a, b, c, d)++getBool :: Get Bool+getBool = getWord8 <&> (/= 0)++getIpv4 :: Get IP4.IpAddress+getIpv4 = getWord32le <&> word32ToIpv4++getIpv6 :: Get IP6.IpAddress+getIpv6 = getWord32x4 <&> word32x4ToIpv6++getIpv4Block :: Get (IP4.IpBlock Canonical)+getIpv4Block =+ let toIpBlock w32 w8 = IP4.IpBlock (IP4.IpAddress w32) (IP4.IpNetMask w8)+ in toIpBlock <$> getWord32le <*> getWord8++getIpv6Block :: Get (IP6.IpBlock Canonical)+getIpv6Block =+ let toIpBlock w128 w8 = IP6.IpBlock (IP6.IpAddress w128) (IP6.IpNetMask w8)+ in toIpBlock <$> getWord32x4 <*> getWord8+ getTextUtf8Z :: Get Text getTextUtf8Z = T.decodeUtf8 . LBS.toStrict <$> getLazyByteStringNul++getNullTerminatedString :: Get LBS.ByteString+getNullTerminatedString = getLazyByteStringNul+