{-# LANGUAGE DeriveAnyClass #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DeriveLift #-} module Argo.Json.Object where import qualified Argo.Json.Member as Member import qualified Argo.Literal as Literal import qualified Argo.Type.Decoder as Decoder import qualified Argo.Type.Encoder as Encoder import qualified Argo.Vendor.Builder as Builder import qualified Argo.Vendor.DeepSeq as DeepSeq import qualified Argo.Vendor.TemplateHaskell as TH import qualified Argo.Vendor.Transformers as Trans import qualified Control.Monad as Monad import qualified GHC.Generics as Generics newtype Object value = Object [Member.Member value] deriving (Object value -> Object value -> Bool (Object value -> Object value -> Bool) -> (Object value -> Object value -> Bool) -> Eq (Object value) forall value. Eq value => Object value -> Object value -> Bool forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a /= :: Object value -> Object value -> Bool $c/= :: forall value. Eq value => Object value -> Object value -> Bool == :: Object value -> Object value -> Bool $c== :: forall value. Eq value => Object value -> Object value -> Bool Eq, (forall x. Object value -> Rep (Object value) x) -> (forall x. Rep (Object value) x -> Object value) -> Generic (Object value) forall x. Rep (Object value) x -> Object value forall x. Object value -> Rep (Object value) x forall a. (forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a forall value x. Rep (Object value) x -> Object value forall value x. Object value -> Rep (Object value) x $cto :: forall value x. Rep (Object value) x -> Object value $cfrom :: forall value x. Object value -> Rep (Object value) x Generics.Generic, Object value -> Q Exp Object value -> Q (TExp (Object value)) (Object value -> Q Exp) -> (Object value -> Q (TExp (Object value))) -> Lift (Object value) forall value. Lift value => Object value -> Q Exp forall value. Lift value => Object value -> Q (TExp (Object value)) forall t. (t -> Q Exp) -> (t -> Q (TExp t)) -> Lift t liftTyped :: Object value -> Q (TExp (Object value)) $cliftTyped :: forall value. Lift value => Object value -> Q (TExp (Object value)) lift :: Object value -> Q Exp $clift :: forall value. Lift value => Object value -> Q Exp TH.Lift, Object value -> () (Object value -> ()) -> NFData (Object value) forall value. NFData value => Object value -> () forall a. (a -> ()) -> NFData a rnf :: Object value -> () $crnf :: forall value. NFData value => Object value -> () DeepSeq.NFData, Int -> Object value -> ShowS [Object value] -> ShowS Object value -> String (Int -> Object value -> ShowS) -> (Object value -> String) -> ([Object value] -> ShowS) -> Show (Object value) forall value. Show value => Int -> Object value -> ShowS forall value. Show value => [Object value] -> ShowS forall value. Show value => Object value -> String forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [Object value] -> ShowS $cshowList :: forall value. Show value => [Object value] -> ShowS show :: Object value -> String $cshow :: forall value. Show value => Object value -> String showsPrec :: Int -> Object value -> ShowS $cshowsPrec :: forall value. Show value => Int -> Object value -> ShowS Show) fromList :: [Member.Member value] -> Object value fromList :: [Member value] -> Object value fromList = [Member value] -> Object value forall value. [Member value] -> Object value Object toList :: Object value -> [Member.Member value] toList :: Object value -> [Member value] toList (Object [Member value] x) = [Member value] x encode :: (value -> Encoder.Encoder ()) -> Object value -> Encoder.Encoder () encode :: (value -> Encoder ()) -> Object value -> Encoder () encode value -> Encoder () f = Encoder () -> Encoder () -> Encoder () -> (Member value -> Encoder ()) -> [Member value] -> Encoder () forall a. Encoder () -> Encoder () -> Encoder () -> (a -> Encoder ()) -> [a] -> Encoder () Encoder.list (WriterT Builder Identity () -> Encoder () forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a Trans.lift (WriterT Builder Identity () -> Encoder ()) -> (Builder -> WriterT Builder Identity ()) -> Builder -> Encoder () forall b c a. (b -> c) -> (a -> b) -> a -> c . Builder -> WriterT Builder Identity () forall (m :: * -> *) w. Monad m => w -> WriterT w m () Trans.tell (Builder -> Encoder ()) -> Builder -> Encoder () forall a b. (a -> b) -> a -> b $ Word8 -> Builder Builder.word8 Word8 Literal.leftCurlyBracket) (WriterT Builder Identity () -> Encoder () forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a Trans.lift (WriterT Builder Identity () -> Encoder ()) -> (Builder -> WriterT Builder Identity ()) -> Builder -> Encoder () forall b c a. (b -> c) -> (a -> b) -> a -> c . Builder -> WriterT Builder Identity () forall (m :: * -> *) w. Monad m => w -> WriterT w m () Trans.tell (Builder -> Encoder ()) -> Builder -> Encoder () forall a b. (a -> b) -> a -> b $ Word8 -> Builder Builder.word8 Word8 Literal.rightCurlyBracket) (WriterT Builder Identity () -> Encoder () forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a Trans.lift (WriterT Builder Identity () -> Encoder ()) -> (Builder -> WriterT Builder Identity ()) -> Builder -> Encoder () forall b c a. (b -> c) -> (a -> b) -> a -> c . Builder -> WriterT Builder Identity () forall (m :: * -> *) w. Monad m => w -> WriterT w m () Trans.tell (Builder -> Encoder ()) -> Builder -> Encoder () forall a b. (a -> b) -> a -> b $ Word8 -> Builder Builder.word8 Word8 Literal.comma) ((value -> Encoder ()) -> Member value -> Encoder () forall value. (value -> Encoder ()) -> Member value -> Encoder () Member.encode value -> Encoder () f) ([Member value] -> Encoder ()) -> (Object value -> [Member value]) -> Object value -> Encoder () forall b c a. (b -> c) -> (a -> b) -> a -> c . Object value -> [Member value] forall value. Object value -> [Member value] toList encodeElement :: (value -> Encoder.Encoder ()) -> Int -> Member.Member value -> Encoder.Encoder () encodeElement :: (value -> Encoder ()) -> Int -> Member value -> Encoder () encodeElement value -> Encoder () f Int i Member value x = do Bool -> Encoder () -> Encoder () forall (f :: * -> *). Applicative f => Bool -> f () -> f () Monad.when (Int i Int -> Int -> Bool forall a. Ord a => a -> a -> Bool > Int 0) (Encoder () -> Encoder ()) -> (Builder -> Encoder ()) -> Builder -> Encoder () forall b c a. (b -> c) -> (a -> b) -> a -> c . WriterT Builder Identity () -> Encoder () forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a Trans.lift (WriterT Builder Identity () -> Encoder ()) -> (Builder -> WriterT Builder Identity ()) -> Builder -> Encoder () forall b c a. (b -> c) -> (a -> b) -> a -> c . Builder -> WriterT Builder Identity () forall (m :: * -> *) w. Monad m => w -> WriterT w m () Trans.tell (Builder -> Encoder ()) -> Builder -> Encoder () forall a b. (a -> b) -> a -> b $ Word8 -> Builder Builder.word8 Word8 Literal.comma (value -> Encoder ()) -> Member value -> Encoder () forall value. (value -> Encoder ()) -> Member value -> Encoder () Member.encode value -> Encoder () f Member value x decode :: Decoder.Decoder value -> Decoder.Decoder (Object value) decode :: Decoder value -> Decoder (Object value) decode Decoder value f = do Word8 -> Decoder () Decoder.word8 Word8 Literal.leftCurlyBracket Decoder () Decoder.spaces [Member value] xs <- Decoder (Member value) -> Decoder [Member value] forall a. Decoder a -> Decoder [a] Decoder.list (Decoder (Member value) -> Decoder [Member value]) -> Decoder (Member value) -> Decoder [Member value] forall a b. (a -> b) -> a -> b $ Decoder value -> Decoder (Member value) forall value. Decoder value -> Decoder (Member value) Member.decode Decoder value f Word8 -> Decoder () Decoder.word8 Word8 Literal.rightCurlyBracket Decoder () Decoder.spaces Object value -> Decoder (Object value) forall (f :: * -> *) a. Applicative f => a -> f a pure (Object value -> Decoder (Object value)) -> Object value -> Decoder (Object value) forall a b. (a -> b) -> a -> b $ [Member value] -> Object value forall value. [Member value] -> Object value fromList [Member value] xs