module DebugPrint.Aeson ( debugPrintRecordToAeson , debugPrintValueToAeson ) where import Prelude import Data.Aeson qualified as Aeson import Data.Aeson.Key qualified as Key import Data.Aeson.KeyMap qualified as KeyMap import Data.Bifunctor (bimap) import Data.Map.Strict qualified as Map import DebugPrint.Class import DebugPrint.Types debugPrintRecordToAeson :: ToDebugPrintRecord a => a -> Aeson.Object debugPrintRecordToAeson :: forall a. ToDebugPrintRecord a => a -> Object debugPrintRecordToAeson a a = let DebugPrintRecord Map Text DebugPrintValue m = a -> DebugPrintRecord forall a. ToDebugPrintRecord a => a -> DebugPrintRecord toDebugPrintRecord a a in [(Key, Value)] -> Object forall v. [(Key, v)] -> KeyMap v KeyMap.fromList ([(Key, Value)] -> Object) -> [(Key, Value)] -> Object forall a b. (a -> b) -> a -> b $ (Text -> Key) -> (DebugPrintValue -> Value) -> (Text, DebugPrintValue) -> (Key, Value) forall a b c d. (a -> b) -> (c -> d) -> (a, c) -> (b, d) forall (p :: * -> * -> *) a b c d. Bifunctor p => (a -> b) -> (c -> d) -> p a c -> p b d bimap Text -> Key Key.fromText DebugPrintValue -> Value forall a. ToDebugPrintValue a => a -> Value debugPrintValueToAeson ((Text, DebugPrintValue) -> (Key, Value)) -> [(Text, DebugPrintValue)] -> [(Key, Value)] forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Map Text DebugPrintValue -> [(Text, DebugPrintValue)] forall k a. Map k a -> [(k, a)] Map.toList Map Text DebugPrintValue m debugPrintValueToAeson :: ToDebugPrintValue a => a -> Aeson.Value debugPrintValueToAeson :: forall a. ToDebugPrintValue a => a -> Value debugPrintValueToAeson a a = case a -> DebugPrintValue forall a. ToDebugPrintValue a => a -> DebugPrintValue toDebugPrintValue a a of DebugPrintValueInt Integer x -> Scientific -> Value Aeson.Number (Scientific -> Value) -> Scientific -> Value forall a b. (a -> b) -> a -> b $ Integer -> Scientific forall a b. (Integral a, Num b) => a -> b fromIntegral Integer x DebugPrintValueText Text x -> Text -> Value Aeson.String Text x DebugPrintValueBool Bool x -> Bool -> Value Aeson.Bool Bool x DebugPrintValueVector Vector DebugPrintValue x -> Array -> Value Aeson.Array (Array -> Value) -> Array -> Value forall a b. (a -> b) -> a -> b $ (DebugPrintValue -> Value) -> Vector DebugPrintValue -> Array forall a b. (a -> b) -> Vector a -> Vector b forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap DebugPrintValue -> Value forall a. ToDebugPrintValue a => a -> Value debugPrintValueToAeson Vector DebugPrintValue x DebugPrintValueRecord DebugPrintRecord x -> Object -> Value Aeson.Object (Object -> Value) -> Object -> Value forall a b. (a -> b) -> a -> b $ DebugPrintRecord -> Object forall a. ToDebugPrintRecord a => a -> Object debugPrintRecordToAeson DebugPrintRecord x