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