{-# LANGUAGE GADTs #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE RecordWildCards #-}
module Observe.Event.Render.JSON
( RenderSelectorJSON,
RenderFieldJSON,
DefaultRenderSelectorJSON (..),
DefaultRenderFieldJSON (..),
RenderExJSON,
SomeJSONException (..),
jsonExceptionToException,
jsonExceptionFromException,
)
where
import Control.Exception
import Data.Aeson
import Data.Aeson.Key
import Data.Typeable
import Data.Void
import Observe.Event.Dynamic
type RenderSelectorJSON sel = forall f. sel f -> (Key, RenderFieldJSON f)
type RenderFieldJSON field = field -> (Key, Value)
class DefaultRenderSelectorJSON sel where
defaultRenderSelectorJSON :: RenderSelectorJSON sel
class DefaultRenderFieldJSON field where
defaultRenderFieldJSON :: RenderFieldJSON field
instance DefaultRenderFieldJSON Void where
defaultRenderFieldJSON :: RenderFieldJSON Void
defaultRenderFieldJSON = forall a. Void -> a
absurd
instance DefaultRenderSelectorJSON DynamicEventSelector where
defaultRenderSelectorJSON :: RenderSelectorJSON DynamicEventSelector
defaultRenderSelectorJSON (DynamicEventSelector Text
n) =
(Text -> Key
fromText Text
n, forall field. DefaultRenderFieldJSON field => RenderFieldJSON field
defaultRenderFieldJSON)
instance DefaultRenderFieldJSON DynamicField where
defaultRenderFieldJSON :: RenderFieldJSON DynamicField
defaultRenderFieldJSON (DynamicField {Text
Value
value :: DynamicField -> Value
name :: DynamicField -> Text
value :: Value
name :: Text
..}) = (Text -> Key
fromText Text
name, Value
value)
type RenderExJSON stex = stex -> Value
data SomeJSONException = forall e. (Exception e, ToJSON e) => SomeJSONException e
instance Show SomeJSONException where
showsPrec :: Int -> SomeJSONException -> ShowS
showsPrec Int
i (SomeJSONException e
e) = forall a. Show a => Int -> a -> ShowS
showsPrec Int
i e
e
instance ToJSON SomeJSONException where
toJSON :: SomeJSONException -> Value
toJSON (SomeJSONException e
e) = forall a. ToJSON a => a -> Value
toJSON e
e
toEncoding :: SomeJSONException -> Encoding
toEncoding (SomeJSONException e
e) = forall a. ToJSON a => a -> Encoding
toEncoding e
e
instance Exception SomeJSONException
jsonExceptionToException :: (Exception e, ToJSON e) => e -> SomeException
jsonExceptionToException :: forall e. (Exception e, ToJSON e) => e -> SomeException
jsonExceptionToException = forall e. Exception e => e -> SomeException
toException forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall e. (Exception e, ToJSON e) => e -> SomeJSONException
SomeJSONException
jsonExceptionFromException :: (Exception e) => SomeException -> Maybe e
jsonExceptionFromException :: forall e. Exception e => SomeException -> Maybe e
jsonExceptionFromException SomeException
x = do
SomeJSONException e
a <- forall e. Exception e => SomeException -> Maybe e
fromException SomeException
x
forall a b. (Typeable a, Typeable b) => a -> Maybe b
cast e
a