diff --git a/hw-prelude.cabal b/hw-prelude.cabal index 96dcbc4..ea6cd31 100644 --- a/hw-prelude.cabal +++ b/hw-prelude.cabal @@ -96,7 +96,9 @@ library HaskellWorks.Error HaskellWorks.Error.Types HaskellWorks.Error.Types.GenericError + HaskellWorks.Error.Types.JsonDecodeError HaskellWorks.Error.Types.TimedOut + HaskellWorks.Error.Types.YamlDecodeError HaskellWorks.FilePath HaskellWorks.IO.Network.NamedPipe HaskellWorks.IO.Network.Port diff --git a/src/HaskellWorks/Error/Types.hs b/src/HaskellWorks/Error/Types.hs index 1ddea0d..c85fc87 100644 --- a/src/HaskellWorks/Error/Types.hs +++ b/src/HaskellWorks/Error/Types.hs @@ -1,7 +1,11 @@ module HaskellWorks.Error.Types ( GenericError (..), + JsonDecodeError (..), TimedOut(..), + YamlDecodeError (..) ) where import HaskellWorks.Error.Types.GenericError +import HaskellWorks.Error.Types.JsonDecodeError import HaskellWorks.Error.Types.TimedOut +import HaskellWorks.Error.Types.YamlDecodeError diff --git a/src/HaskellWorks/Error/Types/JsonDecodeError.hs b/src/HaskellWorks/Error/Types/JsonDecodeError.hs new file mode 100644 index 0000000..06c9ccc --- /dev/null +++ b/src/HaskellWorks/Error/Types/JsonDecodeError.hs @@ -0,0 +1,45 @@ +{-# LANGUAGE DataKinds #-} +{-# LANGUAGE DeriveGeneric #-} +{-# LANGUAGE DuplicateRecordFields #-} +{-# LANGUAGE NoFieldSelectors #-} +{-# LANGUAGE OverloadedRecordDot #-} + +module HaskellWorks.Error.Types.JsonDecodeError + ( JsonDecodeError(..) + , newJsonDecodeError + ) where + + +import Data.Aeson (ToJSON (..), Value, (.=)) +import qualified Data.Aeson as J +import GHC.Generics + +import HaskellWorks.Prelude +import HaskellWorks.ToText + +data JsonDecodeError = + JsonDecodeError + { message :: Text + , bytestring :: Maybe ByteString + , text :: Maybe Text + , json :: Maybe Value + } + deriving (Eq, Generic, Show) + +newJsonDecodeError :: ToText a => a -> JsonDecodeError +newJsonDecodeError message = + JsonDecodeError + { message = toText message + , bytestring = Nothing + , text = Nothing + , json = Nothing + } + +instance ToJSON JsonDecodeError where + toJSON e = + J.object + [ "error" .= id @Text "JsonDecodeError" + , "message" .= e.message + , "text" .= e.text + , "json" .= e.json + ] diff --git a/src/HaskellWorks/Error/Types/YamlDecodeError.hs b/src/HaskellWorks/Error/Types/YamlDecodeError.hs new file mode 100644 index 0000000..1fc4075 --- /dev/null +++ b/src/HaskellWorks/Error/Types/YamlDecodeError.hs @@ -0,0 +1,25 @@ +{-# LANGUAGE DataKinds #-} +{-# LANGUAGE DeriveGeneric #-} +{-# LANGUAGE DuplicateRecordFields #-} + +module HaskellWorks.Error.Types.YamlDecodeError + ( YamlDecodeError(..) + ) where + + +import Data.Aeson (ToJSON (..), (.=)) +import qualified Data.Aeson as J +import GHC.Generics +import HaskellWorks.Prelude +newtype YamlDecodeError = + YamlDecodeError + { message :: Text + } + deriving (Eq, Generic, Show) + +instance ToJSON YamlDecodeError where + toJSON e = + J.object + [ "error" .= id @Text "YamlDecodeError" + , "message" .= e.message + ]