Skip to content

Commit

Permalink
Merge pull request #1 from haskell-works/newhoggy/new-RenderedError-type
Browse files Browse the repository at this point in the history
New RenderedError types
  • Loading branch information
newhoggy authored Nov 2, 2024
2 parents ca8ff87 + 0acb686 commit f4fa30c
Show file tree
Hide file tree
Showing 6 changed files with 116 additions and 15 deletions.
10 changes: 10 additions & 0 deletions hw-prelude.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,14 @@ source-repository head

common base { build-depends: base >= 4.13 && < 5 }

common aeson { build-depends: aeson < 2.3 }
common async { build-depends: async < 2.3 }
common bytestring { build-depends: bytestring < 0.13 }
common contravariant { build-depends: contravariant < 1.6 }
common directory { build-depends: directory < 1.4 }
common filepath { build-depends: filepath < 1.6 }
common generic-lens { build-depends: generic-lens < 2.3 }
common microlens { build-depends: microlens < 0.5 }
common network { build-depends: network < 3.3 }
common process { build-depends: process < 1.7 }
common resourcet { build-depends: resourcet < 1.4 }
Expand Down Expand Up @@ -63,11 +66,14 @@ common project-config

library
import: base, project-config,
aeson,
async,
bytestring,
contravariant,
directory,
filepath,
generic-lens,
microlens,
network,
process,
resourcet,
Expand All @@ -82,6 +88,10 @@ library
HaskellWorks.Data.String
HaskellWorks.Error
HaskellWorks.Error.Types
HaskellWorks.Error.Types.All
HaskellWorks.Error.Types.GenericError
HaskellWorks.Error.Types.RenderedError
HaskellWorks.Error.Types.TimedOut
HaskellWorks.IO.Network.NamedPipe
HaskellWorks.IO.Network.Port
HaskellWorks.IO.Network.Socket
Expand Down
23 changes: 8 additions & 15 deletions src/HaskellWorks/Error/Types.hs
Original file line number Diff line number Diff line change
@@ -1,18 +1,11 @@
{-# LANGUAGE DeriveGeneric #-}

module HaskellWorks.Error.Types
( GenericError(..),
TimedOut(..),
) where
( -- * Error types
GenericError(GenericError),
RenderedError(RenderedError),
TimedOut(TimedOut),

import HaskellWorks.Prelude

newtype GenericError = GenericError
{ message :: Text
}
deriving (Generic, Eq, Show)
-- * Type classes
ToRenderedError(..),
) where

newtype TimedOut = TimedOut
{ message :: Text
}
deriving (Generic, Eq, Show)
import HaskellWorks.Error.Types.All
14 changes: 14 additions & 0 deletions src/HaskellWorks/Error/Types/All.hs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE TypeSynonymInstances #-}

module HaskellWorks.Error.Types.All (
GenericError (..),
RenderedError (..),
TimedOut(..),

ToRenderedError (..),
) where

import HaskellWorks.Error.Types.GenericError
import HaskellWorks.Error.Types.RenderedError
import HaskellWorks.Error.Types.TimedOut
26 changes: 26 additions & 0 deletions src/HaskellWorks/Error/Types/GenericError.hs
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE TypeSynonymInstances #-}

module HaskellWorks.Error.Types.GenericError (
GenericError (..),
) where

import Data.Aeson
import Data.Generics.Product.Any
import HaskellWorks.Error.Types.RenderedError
import Lens.Micro

import HaskellWorks.Prelude

newtype GenericError = GenericError
{ message :: Text
}
deriving (Eq, Generic, Show)

instance ToRenderedError GenericError where
toRenderedError e =
RenderedError
{ error = "GenericError"
, payload = toJSON $ e ^. the @"message"
}
32 changes: 32 additions & 0 deletions src/HaskellWorks/Error/Types/RenderedError.hs
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE TypeSynonymInstances #-}

module HaskellWorks.Error.Types.RenderedError (
RenderedError (..),

ToRenderedError (..),
) where

import Data.Aeson

import HaskellWorks.Prelude

data RenderedError = RenderedError
{ error :: Text
, payload :: Value
}
deriving (Eq, Generic, Show)

instance ToJSON RenderedError where
toJSON e =
object
[ "error" .= error e
, "payload" .= payload e
]

class ToRenderedError a where
toRenderedError :: a -> RenderedError

instance ToRenderedError RenderedError where
toRenderedError = id
26 changes: 26 additions & 0 deletions src/HaskellWorks/Error/Types/TimedOut.hs
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE TypeSynonymInstances #-}

module HaskellWorks.Error.Types.TimedOut (
TimedOut (..),
) where

import Data.Aeson
import Data.Generics.Product.Any
import HaskellWorks.Error.Types.RenderedError
import Lens.Micro

import HaskellWorks.Prelude

newtype TimedOut = TimedOut
{ message :: Text
}
deriving (Eq, Generic, Show)

instance ToRenderedError TimedOut where
toRenderedError e =
RenderedError
{ error = "TimedOut"
, payload = toJSON $ e ^. the @"message"
}

0 comments on commit f4fa30c

Please sign in to comment.