packages feed

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 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