module Network.Bugsnag.MetaData
( MetaData (..)
, metaData
) where
import Prelude
import Data.Aeson.Compat (Object, Value (Object), object, (.=))
import qualified Data.Aeson.Compat as Aeson
newtype MetaData = MetaData
{ MetaData -> Object
unMetaData :: Object
}
deriving stock (MetaData -> MetaData -> Bool
(MetaData -> MetaData -> Bool)
-> (MetaData -> MetaData -> Bool) -> Eq MetaData
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: MetaData -> MetaData -> Bool
== :: MetaData -> MetaData -> Bool
$c/= :: MetaData -> MetaData -> Bool
/= :: MetaData -> MetaData -> Bool
Eq, Int -> MetaData -> ShowS
[MetaData] -> ShowS
MetaData -> String
(Int -> MetaData -> ShowS)
-> (MetaData -> String) -> ([MetaData] -> ShowS) -> Show MetaData
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> MetaData -> ShowS
showsPrec :: Int -> MetaData -> ShowS
$cshow :: MetaData -> String
show :: MetaData -> String
$cshowList :: [MetaData] -> ShowS
showList :: [MetaData] -> ShowS
Show)
instance Semigroup MetaData where
MetaData Object
x <> :: MetaData -> MetaData -> MetaData
<> MetaData Object
y = Object -> MetaData
MetaData (Object -> MetaData) -> Object -> MetaData
forall a b. (a -> b) -> a -> b
$ Object -> Object -> Object
unionObjects Object
y Object
x
where
unionObjects :: Object -> Object -> Object
unionObjects :: Object -> Object -> Object
unionObjects = (Value -> Value -> Value) -> Object -> Object -> Object
forall v. (v -> v -> v) -> KeyMap v -> KeyMap v -> KeyMap v
Aeson.unionWith Value -> Value -> Value
unionValues
unionValues :: Value -> Value -> Value
unionValues (Object Object
a) (Object Object
b) = Object -> Value
Object (Object -> Value) -> Object -> Value
forall a b. (a -> b) -> a -> b
$ Object -> Object -> Object
unionObjects Object
a Object
b
unionValues Value
a Value
_ = Value
a
instance Monoid MetaData where
mempty :: MetaData
mempty = Object -> MetaData
MetaData Object
forall a. Monoid a => a
mempty
metaData
:: Aeson.Key
-> [Aeson.Pair]
-> MetaData
metaData :: Key -> [(Key, Value)] -> MetaData
metaData Key
key = Object -> MetaData
MetaData (Object -> MetaData)
-> ([(Key, Value)] -> Object) -> [(Key, Value)] -> MetaData
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [(Key, Value)] -> Object
forall v. [(Key, v)] -> KeyMap v
Aeson.fromList ([(Key, Value)] -> Object)
-> ([(Key, Value)] -> [(Key, Value)]) -> [(Key, Value)] -> Object
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Key, Value) -> [(Key, Value)]
forall a. a -> [a]
forall (f :: * -> *) a. Applicative f => a -> f a
pure ((Key, Value) -> [(Key, Value)])
-> ([(Key, Value)] -> (Key, Value))
-> [(Key, Value)]
-> [(Key, Value)]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Key
key Key -> Value -> (Key, Value)
forall v. ToJSON v => Key -> v -> (Key, Value)
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.=) (Value -> (Key, Value))
-> ([(Key, Value)] -> Value) -> [(Key, Value)] -> (Key, Value)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [(Key, Value)] -> Value
object