module Serokell.Util.Verify
( VerificationRes (..)
, isVerFailure
, isVerSuccess
, verifyGeneric
) where
import Data.Semigroup (Semigroup)
import qualified Data.Semigroup as Semigroup
import qualified Data.Text as T
data VerificationRes
= VerSuccess
| VerFailure ![T.Text]
deriving (Show)
isVerSuccess :: VerificationRes -> Bool
isVerSuccess VerSuccess = True
isVerSuccess _ = False
isVerFailure :: VerificationRes -> Bool
isVerFailure (VerFailure _) = True
isVerFailure _ = False
instance Semigroup VerificationRes where
VerSuccess <> a = a
VerFailure xs <> a =
VerFailure $
xs ++
case a of
VerSuccess -> []
VerFailure ys -> ys
instance Monoid VerificationRes where
mempty = VerSuccess
mappend = (Semigroup.<>)
verifyGeneric :: [(Bool, T.Text)] -> VerificationRes
verifyGeneric errors
| null messages = VerSuccess
| otherwise = VerFailure messages
where
messages = map snd . filter (not . fst) $ errors