{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE TypeOperators #-}
module Observe.Event.Dynamic
( DynamicEventSelector (..),
DynamicField (..),
DynamicEventBackend,
DynamicEvent,
)
where
import Data.Aeson
import Data.String
import Data.Text
import Observe.Event
import Observe.Event.Syntax
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 a) => RecordField Text a DynamicField where
Text
k ≔ :: Text -> a -> DynamicField
≔ a
v = Text -> Value -> DynamicField
DynamicField Text
k forall a b. (a -> b) -> a -> b
$ forall a. ToJSON a => a -> Value
toJSON a
v
type DynamicEventBackend m r = EventBackend m r DynamicEventSelector
type DynamicEvent m r = Event m r DynamicField