serokell-util 0.2.0.0 → 0.3
raw patch · 10 files changed
+18/−148 lines, 10 filesdep −aeson-extradep −binarydep −binary-orphansPVP ok
version bump matches the API change (PVP)
Dependencies removed: aeson-extra, binary, binary-orphans, cereal, cereal-vector, either
API changes (from Hackage documentation)
- Serokell.AcidState.Statistics: StoragePart :: PartName -> Getter storage part -> StoragePart storage
- Serokell.AcidState.Statistics: [spGetter] :: StoragePart storage -> Getter storage part
- Serokell.AcidState.Statistics: [spName] :: StoragePart storage -> PartName
- Serokell.AcidState.Statistics: data StoragePart storage
- Serokell.AcidState.Statistics: estimateMemoryUsage :: MemoryUnit unit => [StoragePart s] -> s -> [(PartName, unit)]
- Serokell.Data.Memory.Units: instance Data.Binary.Class.Binary Serokell.Data.Memory.Units.Byte
- Serokell.Data.Memory.Units: instance Data.SafeCopy.SafeCopy.SafeCopy Serokell.Data.Memory.Units.Byte
- Serokell.Data.Memory.Units: instance Data.SafeCopy.SafeCopy.SafeCopy Serokell.Data.Memory.Units.Gigabyte
- Serokell.Data.Memory.Units: instance Data.SafeCopy.SafeCopy.SafeCopy Serokell.Data.Memory.Units.Kilobyte
- Serokell.Data.Memory.Units: instance Data.SafeCopy.SafeCopy.SafeCopy Serokell.Data.Memory.Units.Megabyte
- Serokell.Data.Memory.Units: instance Data.SafeCopy.SafeCopy.SafeCopy Serokell.Data.Memory.Units.Terabyte
- Serokell.Data.Memory.Units: instance Data.Serialize.Serialize Serokell.Data.Memory.Units.Byte
- Serokell.Data.Memory.Units: instance Data.Serialize.Serialize Serokell.Data.Memory.Units.Gigabyte
- Serokell.Data.Memory.Units: instance Data.Serialize.Serialize Serokell.Data.Memory.Units.Kilobyte
- Serokell.Data.Memory.Units: instance Data.Serialize.Serialize Serokell.Data.Memory.Units.Megabyte
- Serokell.Data.Memory.Units: instance Data.Serialize.Serialize Serokell.Data.Memory.Units.Terabyte
- Serokell.Util.Binary: decodeFull :: Binary a => ByteString -> Either String a
- Serokell.Util.I18N: instance (GHC.Classes.Eq a, GHC.Classes.Ord a, GHC.Generics.Generic a, Data.Aeson.Types.FromJSON.GFromJSON Data.Aeson.Types.Generic.Zero (GHC.Generics.Rep a)) => Serokell.Util.I18N.YamlMapKey a
- Serokell.Util.I18N: instance (GHC.Generics.Generic a, Data.Aeson.Types.FromJSON.GFromJSON Data.Aeson.Types.Generic.Zero (GHC.Generics.Rep a)) => Data.Aeson.Extra.Map.FromJSONKey a
+ Serokell.Util.I18N: instance (GHC.Classes.Eq a, GHC.Classes.Ord a, GHC.Generics.Generic a, Data.Aeson.Types.FromJSON.GFromJSON Data.Aeson.Types.Generic.Zero (GHC.Generics.Rep a), Data.Aeson.Types.FromJSON.FromJSONKey a, Data.Aeson.Types.FromJSON.FromJSON a) => Serokell.Util.I18N.YamlMapKey a
- Serokell.Util.I18N: class (Eq a, Ord a, FromJSONKey a) => YamlMapKey a
+ Serokell.Util.I18N: class (Eq a, Ord a, FromJSONKey a, FromJSON a) => YamlMapKey a
Files
- serokell-util.cabal +1/−11
- src/Serokell/AcidState/Statistics.hs +0/−36
- src/Serokell/Data/Memory/Units.hs +5/−13
- src/Serokell/Data/Variant/Serialization.hs +0/−31
- src/Serokell/Util.hs +0/−1
- src/Serokell/Util/Base64.hs +3/−3
- src/Serokell/Util/Binary.hs +0/−17
- src/Serokell/Util/I18N.hs +8/−17
- src/Serokell/Util/Parse/Common.hs +1/−1
- test/Test/Serokell/Data/Variant/VariantSpec.hs +0/−18
serokell-util.cabal view
@@ -1,5 +1,5 @@ name: serokell-util-version: 0.2.0.0+version: 0.3 synopsis: General-purpose functions by Serokell homepage: https://github.com/serokell/serokell-util license: MIT@@ -22,7 +22,6 @@ exposed-modules: Serokell.AcidState Serokell.AcidState.ExtendedState Serokell.AcidState.Instances- Serokell.AcidState.Statistics Serokell.AcidState.Util Serokell.Arbitrary Serokell.Aeson.Options@@ -34,7 +33,6 @@ Serokell.Util.Base16 Serokell.Util.Base64 Serokell.Util.Bench- Serokell.Util.Binary Serokell.Util.Common Serokell.Util.Concurrent Serokell.Util.I18N@@ -56,21 +54,15 @@ build-depends: QuickCheck >= 2.8.1 , acid-state , aeson >= 0.11.0.0 && < 1.2.0.0- , aeson-extra >= 0.4.0.0 , ansi-terminal , base >= 4.8 && < 5 , base16-bytestring , base64-bytestring- , binary- , binary-orphans , bytestring- , cereal- , cereal-vector , clock , containers , deepseq , directory- , either , exceptions , extra , filepath@@ -117,9 +109,7 @@ type: exitcode-stdio-1.0 build-depends: aeson >= 0.11.0.0 && < 1.2.0.0 , base >=4.8- , binary , bytestring- , cereal , hspec >= 2.1.10 , QuickCheck >= 2.8.1 , quickcheck-instances
− src/Serokell/AcidState/Statistics.hs
@@ -1,36 +0,0 @@-{-# LANGUAGE ExistentialQuantification #-}-{-# LANGUAGE Rank2Types #-}---- | Collect statistics about acid-state database.--module Serokell.AcidState.Statistics- ( StoragePart (..)-- , estimateMemoryUsage- ) where--import Control.Lens (Getter, (^.))-import qualified Data.ByteString as BS (length)-import Data.SafeCopy (SafeCopy, safePut)-import Data.Serialize.Put (runPut)-import Data.Text (Text)--import Serokell.Data.Memory.Units (MemoryUnit, fromBytes)--type PartName = Text--data StoragePart storage = forall part. SafeCopy part =>- StoragePart- { spName :: PartName- , spGetter :: Getter storage part- }--estimateMemoryUsage- :: MemoryUnit unit- => [StoragePart s] -> s -> [(PartName, unit)]-estimateMemoryUsage parts storage = map processPart parts- where- processPart StoragePart{..} =- ( spName- , fromBytes . toInteger . BS.length . runPut . safePut . (storage ^.) $- spGetter)
src/Serokell/Data/Memory/Units.hs view
@@ -29,10 +29,7 @@ ) where import Control.DeepSeq (NFData)-import Data.Binary (Binary) import Data.Proxy (Proxy (Proxy))-import Data.SafeCopy (SafeCopy)-import Data.Serialize (Serialize) import Data.Text.Lazy.Builder (Builder) import Data.Typeable (Typeable) import Formatting (bprint, stext, (%))@@ -95,19 +92,17 @@ newtype Byte = Byte Integer- deriving (Show,Eq,Num,Typeable,Integral,Real,Enum,Ord,Generic,Serialize,Binary, Arbitrary)+ deriving (Show,Eq,Num,Typeable,Integral,Real,Enum,Ord,Generic,Arbitrary) instance NFData Byte-instance SafeCopy Byte instance MemoryUnit Byte where bytesMultiplier Proxy = pow10 0 newtype Kilobyte = Kilobyte Integer- deriving (Show,Eq,Num,Typeable,Integral,Real,Enum,Ord,Generic,Serialize,Arbitrary)+ deriving (Show,Eq,Num,Typeable,Integral,Real,Enum,Ord,Generic,Arbitrary) instance NFData Kilobyte-instance SafeCopy Kilobyte instance MemoryUnit Kilobyte where bytesMultiplier Proxy = pow10 3 @@ -115,27 +110,24 @@ newtype Megabyte = Megabyte Integer- deriving (Show,Eq,Num,Typeable,Integral,Real,Enum,Ord,Generic,Serialize,Arbitrary)+ deriving (Show,Eq,Num,Typeable,Integral,Real,Enum,Ord,Generic,Arbitrary) instance NFData Megabyte-instance SafeCopy Megabyte instance MemoryUnit Megabyte where bytesMultiplier Proxy = pow10 6 newtype Gigabyte = Gigabyte Integer- deriving (Show,Eq,Num,Typeable,Integral,Real,Enum,Ord,Generic,Serialize,Arbitrary)+ deriving (Show,Eq,Num,Typeable,Integral,Real,Enum,Ord,Generic,Arbitrary) instance NFData Gigabyte-instance SafeCopy Gigabyte instance MemoryUnit Gigabyte where bytesMultiplier Proxy = pow10 9 newtype Terabyte = Terabyte Integer- deriving (Show,Eq,Num,Typeable,Integral,Real,Enum,Ord,Generic,Serialize,Arbitrary)+ deriving (Show,Eq,Num,Typeable,Integral,Real,Enum,Ord,Generic,Arbitrary) instance NFData Terabyte-instance SafeCopy Terabyte instance MemoryUnit Terabyte where bytesMultiplier Proxy = pow10 12
src/Serokell/Data/Variant/Serialization.hs view
@@ -9,17 +9,8 @@ import qualified Data.Aeson as Aeson import Data.Bifunctor (bimap)-import Data.Binary (Binary)-import Data.Binary.Orphans ()-import Data.Hashable (Hashable)-import Data.HashMap.Strict (HashMap) import qualified Data.HashMap.Strict as HM hiding (HashMap)-import Data.SafeCopy (SafeCopy) import Data.Scientific (floatingOrInteger)-import qualified Data.Serialize as Cereal-import Data.Text (Text)-import qualified Data.Text.Encoding as TE-import Data.Vector.Serialize () import Serokell.Data.Variant.Variant (VarMap, Variant (..)) import Serokell.Util.Base64 (JsonByteString (JsonByteString))@@ -81,25 +72,3 @@ (VarString key, ) <$> Aeson.parseJSON val) . HM.toList $ v---- —————————Cereal and SafeCopy serialization————————— ----- This serialization is very simple: first byte is tag followed by actual value.--- `decode . encode` should be `id`.---- TODO: move it somewhere??-instance Cereal.Serialize Text where- put = Cereal.put . TE.encodeUtf8- get = TE.decodeUtf8 <$> Cereal.get--instance (Eq a, Hashable a, Cereal.Serialize a, Cereal.Serialize b) =>- Cereal.Serialize (HashMap a b) where- put = Cereal.put . HM.toList- get = HM.fromList <$> Cereal.get--instance Cereal.Serialize Variant--instance SafeCopy Variant---- —————————Binary serialization————————— ----- Here we use Generic support, it should be good enough.-instance Binary Variant
src/Serokell/Util.hs view
@@ -7,7 +7,6 @@ import Serokell.Util.ANSI as Exports import Serokell.Util.Bench as Exports-import Serokell.Util.Binary as Exports import Serokell.Util.Common as Exports import Serokell.Util.Concurrent as Exports import Serokell.Util.Exceptions as Exports
src/Serokell/Util/Base64.hs view
@@ -17,10 +17,10 @@ import Data.Aeson.Types (FromJSONKey (..), FromJSONKeyFunction (FromJSONKeyTextParser), ToJSONKey (..), toJSONKeyText)+import Data.Bifunctor (first) import qualified Data.ByteString as BS import qualified Data.ByteString.Base64 as B64 import qualified Data.ByteString.Base64.URL as B64url-import Data.Either.Combinators (mapLeft) import Data.Hashable (Hashable) import qualified Data.Text as T import Data.Text.Encoding (decodeUtf8, encodeUtf8)@@ -34,7 +34,7 @@ -- | Decode base64-encoded ByteString. decode :: T.Text -> Either T.Text BS.ByteString-decode = mapLeft T.pack . B64.decode . encodeUtf8+decode = first T.pack . B64.decode . encodeUtf8 -- | Apply base64url encoding to strict ByteString. encodeUrl :: BS.ByteString -> T.Text@@ -42,7 +42,7 @@ -- | Decode base64url-encoded ByteString. decodeUrl :: T.Text -> Either T.Text BS.ByteString-decodeUrl = mapLeft T.pack . B64url.decode . encodeUtf8+decodeUrl = first T.pack . B64url.decode . encodeUtf8 -- | Construct Builder from bytestring formatting it in Base64. formatBase64 :: BS.ByteString -> Builder
− src/Serokell/Util/Binary.hs
@@ -1,17 +0,0 @@--- | Utilities for @Data.Binary@.--module Serokell.Util.Binary- ( decodeFull- ) where--import Data.Binary (Binary, decodeOrFail)-import qualified Data.ByteString.Lazy as BSL-import Data.ByteString.Lazy (ByteString)---- | Like 'decode', but ensures that the whole input has been consumed.-decodeFull :: Binary a => ByteString -> Either String a-decodeFull bs = case decodeOrFail bs of- Left (_, _, err) -> Left ("decodeFull: " ++ err)- Right (unconsumed, _, a)- | BSL.null unconsumed -> Right a- | otherwise -> Left "decodeFull: unconsumed input"
src/Serokell/Util/I18N.hs view
@@ -11,8 +11,7 @@ , ToReplaceToken(..) ) where -import Data.Aeson.Extra.Map (FromJSONKey (..), getMap)-import qualified Data.Aeson.Types as AT+import qualified Data.Aeson as AT import Data.ByteString as BS import qualified Data.Map.Strict as M import Data.Text as T@@ -25,19 +24,15 @@ -- It's better to get rid of aeson-extra depricated things here, but -- aeson-1.0.0.0 structure of FromJSONKey requires fromJSONKeyList -- which is unobvious to implement.-class (Eq a, Ord a, FromJSONKey a) => YamlMapKey a--#if MIN_VERSION_aeson(1,0,0)-instance (Generic a, AT.GFromJSON AT.Zero (Rep a)) =>-#else-instance (Generic a, AT.GFromJSON (Rep a)) =>-#endif- FromJSONKey a where- parseJSONKey l = AT.genericParseJSON defaultOptions (AT.String l)-+class (Eq a, Ord a, AT.FromJSONKey a, AT.FromJSON a) => YamlMapKey a #if MIN_VERSION_aeson(1,0,0)-instance (Eq a, Ord a, Generic a, AT.GFromJSON AT.Zero (Rep a)) =>+instance (Eq a,+ Ord a,+ Generic a,+ AT.GFromJSON AT.Zero (Rep a),+ AT.FromJSONKey a,+ AT.FromJSON a) => #else instance (Eq a, Ord a, Generic a, AT.GFromJSON (Rep a)) => #endif@@ -49,15 +44,11 @@ => BS.ByteString -> Translations lang token fromYaml yamlStr =- toLangMap $ either (error . T.unpack . sformat ("Error during translation YAML parsing " % build)) id $ decodeEither yamlStr- where- toLangMap = fmap getMap . getMap- class (Ord a, Eq a) => ToReplaceToken a where toReplaceToken :: a -> T.Text
src/Serokell/Util/Parse/Common.hs view
@@ -14,7 +14,7 @@ ) where import Control.Applicative (some)-import Text.Parsec (Parsec, ParsecT, Stream, option, satisfy)+import Text.Parsec (ParsecT, Stream, option, satisfy) import Text.Parsec.Char (digit) type CharParser a = forall s u m. Stream s m Char => ParsecT s u m a
test/Test/Serokell/Data/Variant/VariantSpec.hs view
@@ -6,11 +6,8 @@ ) where import qualified Data.Aeson as A (decode, encode)-import qualified Data.Binary as B (decode, encode) import qualified Data.HashMap.Lazy as HM (elems, fromList, keys)-import qualified Data.SafeCopy as SC (safeGet, safePut) import Data.Scientific (floatingOrInteger, fromFloatDigits)-import qualified Data.Serialize as C (decode, encode, runGet, runPut) import Data.Text (unpack) import qualified Data.Vector as V (map) import Test.Hspec (Spec, describe)@@ -30,12 +27,6 @@ \(getVariant -> a) -> (jsonFixer a) === jsonMid a prop "Variant (Only VarBytes)" $ \(getVarBytes -> a) -> a === (bytesFun $ jsonMid a)- prop "Binary" $- \(a :: S.Variant) -> a === binMid a- prop "SafeCopy" $- \(a :: S.Variant) -> a === safeCopyMid a- prop "Serialize" $- \(a :: S.Variant) -> a === cerealMid a jsonFixer :: S.Variant -> S.Variant jsonFixer (S.VarMap m) = let ks = map toStr $ HM.keys m@@ -69,12 +60,3 @@ where right = either (error . unpack) id $ S.decode s bytesFun _ = error "[bytesFun:] called with Variant that was not VarBytes"--binMid :: S.Variant -> S.Variant-binMid = B.decode . B.encode--cerealMid :: S.Variant -> S.Variant-cerealMid = either error id . C.decode . C.encode--safeCopyMid :: S.Variant -> S.Variant-safeCopyMid = either error id . C.runGet SC.safeGet . C.runPut . SC.safePut