{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GADTs #-}
module Observe.Event.Dynamic
( DynamicEventSelector (..),
DynamicField (..),
DynamicEventBackend,
DynamicEvent,
)
where
import Data.Aeson
import Data.String
import Data.Text
import Observe.Event
data DynamicEventSelector f where
DynamicEventSelector :: !Text -> DynamicEventSelector DynamicField
instance (f ~ DynamicField) => IsString (DynamicEventSelector f) where
fromString :: String -> DynamicEventSelector f
fromString = Text -> DynamicEventSelector DynamicField
DynamicEventSelector forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. IsString a => String -> a
fromString
data DynamicField = DynamicField
{ DynamicField -> Text
name :: !Text,
DynamicField -> Value
value :: !Value
}
instance (ToJSON x) => IsString (x -> DynamicField) where
fromString :: String -> x -> DynamicField
fromString String
s = Text -> Value -> DynamicField
DynamicField (forall a. IsString a => String -> a
fromString String
s) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. ToJSON a => a -> Value
toJSON
type DynamicEventBackend m r = EventBackend m r DynamicEventSelector
type DynamicEvent m r = Event m r DynamicEventSelector DynamicField