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
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: MetaData -> MetaData -> Bool
$c/= :: MetaData -> MetaData -> Bool
== :: MetaData -> MetaData -> Bool
$c== :: MetaData -> MetaData -> Bool
Eq, Int -> MetaData -> ShowS
[MetaData] -> ShowS
MetaData -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [MetaData] -> ShowS
$cshowList :: [MetaData] -> ShowS
show :: MetaData -> String
$cshow :: MetaData -> String
showsPrec :: Int -> MetaData -> ShowS
$cshowsPrec :: Int -> MetaData -> ShowS
Show)
instance Semigroup MetaData where
MetaData Object
x <> :: MetaData -> MetaData -> MetaData
<> MetaData Object
y = Object -> MetaData
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 = 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 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 forall a. Monoid a => a
mempty
metaData
:: Aeson.Key
-> [Aeson.Pair]
-> MetaData
metaData :: Key -> [(Key, Value)] -> MetaData
metaData Key
key = Object -> MetaData
MetaData forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall v. [(Key, v)] -> KeyMap v
Aeson.fromList forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (f :: * -> *) a. Applicative f => a -> f a
pure forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Key
key forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.=) forall b c a. (b -> c) -> (a -> b) -> a -> c
. [(Key, Value)] -> Value
object