{-# LANGUAGE GADTs #-}
{-# LANGUAGE RankNTypes #-}
module Observe.Event.Render.JSON
( RenderSelectorJSON,
RenderFieldJSON,
RenderExJSON,
renderJSONException,
SomeJSONException (..),
jsonExceptionToException,
jsonExceptionFromException,
renderDynamicEventSelectorJSON,
renderDynamicFieldJSON,
)
where
import Control.Exception
import Data.Aeson
import Data.Aeson.Key
import Data.Typeable
import Observe.Event.Dynamic
type RenderSelectorJSON sel = forall f. sel f -> (Key, RenderFieldJSON f)
type RenderFieldJSON field = field -> (Key, Value)
type RenderExJSON stex = stex -> Value
renderDynamicEventSelectorJSON :: RenderSelectorJSON DynamicEventSelector
renderDynamicEventSelectorJSON :: RenderSelectorJSON DynamicEventSelector
renderDynamicEventSelectorJSON (DynamicEventSelector Text
n) =
(Text -> Key
fromText Text
n, RenderFieldJSON DynamicField
renderDynamicFieldJSON)
renderDynamicFieldJSON :: RenderFieldJSON DynamicField
renderDynamicFieldJSON :: RenderFieldJSON DynamicField
renderDynamicFieldJSON DynamicField
f = (Text -> Key
fromText (DynamicField -> Text
name DynamicField
f), DynamicField -> Value
value DynamicField
f)
renderJSONException :: RenderExJSON SomeJSONException
renderJSONException :: RenderExJSON SomeJSONException
renderJSONException (SomeJSONException e
e) = forall a. ToJSON a => a -> Value
toJSON e
e
data SomeJSONException = forall e. (Exception e, ToJSON e) => SomeJSONException e
instance Show SomeJSONException where
show :: SomeJSONException -> String
show (SomeJSONException e
e) = forall a. Show a => a -> String
show e
e
showsPrec :: Int -> SomeJSONException -> ShowS
showsPrec Int
i (SomeJSONException e
e) = forall a. Show a => Int -> a -> ShowS
showsPrec Int
i 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