module HaskellWorks.Polysemy.Data.Aeson
  ( aesonDecode,
  ) where

import qualified Data.Aeson                                        as Aeson
import qualified HaskellWorks.Polysemy.Data.ByteString.Lazy        as LBS
import           HaskellWorks.Polysemy.Prelude
import           Polysemy
import           Polysemy.Error

import           Data.Aeson                                        (FromJSON)
import           HaskellWorks.Polysemy.Error.Types.JsonDecodeError

aesonDecode :: forall a r. ()
  => Member (Error JsonDecodeError) r
  => FromJSON a
  => LBS.ByteString
  -> Sem r a
aesonDecode :: forall a (r :: EffectRow).
(Member (Error JsonDecodeError) r, FromJSON a) =>
ByteString -> Sem r a
aesonDecode ByteString
bs =
  Either String a -> Sem (Error String : r) a
forall e (r :: EffectRow) a.
Member (Error e) r =>
Either e a -> Sem r a
fromEither (ByteString -> Either String a
forall a. FromJSON a => ByteString -> Either String a
Aeson.eitherDecode ByteString
bs)
    Sem (Error String : r) a
-> (Sem (Error String : r) a -> Sem r a) -> Sem r a
forall a b. a -> (a -> b) -> b
& (String -> JsonDecodeError) -> Sem (Error String : r) a -> Sem r a
forall e1 e2 (r :: EffectRow) a.
Member (Error e2) r =>
(e1 -> e2) -> Sem (Error e1 : r) a -> Sem r a
mapError String -> JsonDecodeError
forall a. ToText a => a -> JsonDecodeError
newJsonDecodeError