packages feed

serokell-util 0.1.2.4 → 0.1.3.0

raw patch · 3 files changed

+84/−14 lines, 3 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

- Serokell.Data.Memory.Units: instance Control.DeepSeq.NFData Serokell.Data.Memory.Units.Byte
- Serokell.Data.Memory.Units: instance Control.DeepSeq.NFData Serokell.Data.Memory.Units.Gigabyte
- Serokell.Data.Memory.Units: instance Control.DeepSeq.NFData Serokell.Data.Memory.Units.Kilobyte
- Serokell.Data.Memory.Units: instance Control.DeepSeq.NFData Serokell.Data.Memory.Units.Megabyte
- Serokell.Data.Memory.Units: instance Control.DeepSeq.NFData Serokell.Data.Memory.Units.Terabyte
+ Serokell.Util.Verify: buildVerResFull :: VerificationRes -> Builder
+ Serokell.Util.Verify: buildVerResSingle :: VerificationRes -> Builder
+ Serokell.Util.Verify: formatAllErrors :: [Text] -> Text
+ Serokell.Util.Verify: formatFirstError :: [Text] -> Text
+ Serokell.Util.Verify: verResFullF :: Format r (VerificationRes -> r)
+ Serokell.Util.Verify: verResSingleF :: Format r (VerificationRes -> r)
+ Serokell.Util.Verify: verResToMonadError :: MonadError e m => ([Text] -> e) -> VerificationRes -> m ()

Files

serokell-util.cabal view
@@ -1,5 +1,5 @@ name:                serokell-util-version:             0.1.2.4+version:             0.1.3.0 synopsis:            General-purpose functions by Serokell homepage:            https://github.com/serokell/serokell-util license:             MIT@@ -96,9 +96,10 @@   default-language:    Haskell2010   ghc-options:         -Wall -fno-warn-orphans   default-extensions:  OverloadedStrings-                     , RecordWildCards-                     , DeriveDataTypeable-                     , GeneralizedNewtypeDeriving+                       RecordWildCards+                       DeriveDataTypeable+                       GeneralizedNewtypeDeriving+                       TypeApplications  test-suite serokell-test   main-is:             Test.hs
src/Serokell/Data/Memory/Units.hs view
@@ -28,7 +28,6 @@        , convertUnit        ) where -import           Control.DeepSeq        (NFData) import           Data.Binary            (Binary) import           Data.Proxy             (Proxy (Proxy)) import           Data.SafeCopy          (SafeCopy)@@ -97,8 +96,8 @@     Byte Integer     deriving (Show,Eq,Num,Typeable,Integral,Real,Enum,Ord,Generic,Serialize,Binary, Arbitrary) -instance NFData Byte instance SafeCopy Byte+ instance MemoryUnit Byte where     bytesMultiplier Proxy = pow10 0 @@ -106,19 +105,19 @@     Kilobyte Integer     deriving (Show,Eq,Num,Typeable,Integral,Real,Enum,Ord,Generic,Serialize,Arbitrary) -instance NFData Kilobyte instance SafeCopy Kilobyte+ instance MemoryUnit Kilobyte where     bytesMultiplier Proxy = pow10 3 --- P.S. Feel free to add more.+-- P. S. Feel free to add more.  newtype Megabyte =     Megabyte Integer     deriving (Show,Eq,Num,Typeable,Integral,Real,Enum,Ord,Generic,Serialize,Arbitrary) -instance NFData Megabyte instance SafeCopy Megabyte+ instance MemoryUnit Megabyte where     bytesMultiplier Proxy = pow10 6 @@ -126,8 +125,8 @@     Gigabyte Integer     deriving (Show,Eq,Num,Typeable,Integral,Real,Enum,Ord,Generic,Serialize,Arbitrary) -instance NFData Gigabyte instance SafeCopy Gigabyte+ instance MemoryUnit Gigabyte where     bytesMultiplier Proxy = pow10 9 @@ -135,7 +134,7 @@     Terabyte Integer     deriving (Show,Eq,Num,Typeable,Integral,Real,Enum,Ord,Generic,Serialize,Arbitrary) -instance NFData Terabyte instance SafeCopy Terabyte+ instance MemoryUnit Terabyte where     bytesMultiplier Proxy = pow10 12
src/Serokell/Util/Verify.hs view
@@ -1,17 +1,37 @@+{-# LANGUAGE TypeApplications #-}+ -- | General-purpose utility functions  module Serokell.Util.Verify        ( VerificationRes (..)++       -- * Helpers        , isVerFailure        , isVerSuccess+       , verResToMonadError +       -- * Verification        , verifyGeneric++       -- * Prety printing+       , buildVerResFull+       , buildVerResSingle+       , formatAllErrors+       , formatFirstError+       , verResFullF+       , verResSingleF        ) where -import           Data.Semigroup (Semigroup)-import qualified Data.Semigroup as Semigroup-import qualified Data.Text      as T+import           Control.Monad.Except   (MonadError, throwError)+import           Data.Semigroup         (Semigroup)+import qualified Data.Semigroup         as Semigroup+import           Data.Text              (Text)+import qualified Data.Text              as T+import qualified Data.Text.Lazy.Builder as B+import           Formatting             (Format, later, sformat) +import           Serokell.Util.Text     (listBuilder)+ data VerificationRes     = VerSuccess     | VerFailure ![T.Text]@@ -50,3 +70,53 @@     | otherwise = VerFailure messages   where     messages = map snd . filter (not . fst) $ errors++----------------------------------------------------------------------------+-- Pretty printing+----------------------------------------------------------------------------++-- | Format VerificationRes in a pretty way using all errors messages+-- for VerFailure.+buildVerResFull :: VerificationRes -> B.Builder+buildVerResFull VerSuccess          = buildVerResImpl Nothing+buildVerResFull (VerFailure errors) = buildVerResImpl $ Just errors++-- | Format VerificationRes in a pretty way using only first message+-- for VerFailure.+buildVerResSingle :: VerificationRes -> B.Builder+buildVerResSingle VerSuccess          = buildVerResImpl Nothing+-- [SU-1] Use NonEmpty instead of unsafe head.+buildVerResSingle (VerFailure errors) = buildVerResImpl $ Just $ [head errors]++buildVerResImpl :: Maybe [T.Text] -> B.Builder+buildVerResImpl Nothing       = "success"+buildVerResImpl (Just errors) =+    "failure: " `mappend` listBuilder @Text @Text @Text "[" "; " "]" errors++-- | Formatter based on buildVerResFull.+verResFullF :: Format r (VerificationRes -> r)+verResFullF = later buildVerResFull++-- | Formatter based on buildVerResSingle.+verResSingleF :: Format r (VerificationRes -> r)+verResSingleF = later buildVerResSingle++-- These two functions can have more general type.++-- | Pretty printer for errors from VerFailure, all errors are printed.+formatAllErrors :: [Text] -> Text+formatAllErrors = sformat verResFullF . VerFailure++-- | Pretty printer for errors from VerFailure, only first error is printed.+formatFirstError :: [Text] -> Text+formatFirstError = sformat verResSingleF . VerFailure++----------------------------------------------------------------------------+-- Conversion to MonadError (including Either)+----------------------------------------------------------------------------++verResToMonadError+    :: MonadError e m+    => ([Text] -> e) -> VerificationRes -> m ()+verResToMonadError _ VerSuccess          = pure ()+verResToMonadError f (VerFailure errors) = throwError $ f errors