{-# LANGUAGE DeriveAnyClass #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DeriveLift #-} module Argo.Json.Object where import qualified Argo.Decoder as Decoder import qualified Argo.Encoder as Encoder import qualified Argo.Json.Member as Member import qualified Argo.Literal as Literal 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 ObjectOf value = Object [Member.MemberOf value] deriving (ObjectOf value -> ObjectOf value -> Bool (ObjectOf value -> ObjectOf value -> Bool) -> (ObjectOf value -> ObjectOf value -> Bool) -> Eq (ObjectOf value) forall value. Eq value => ObjectOf value -> ObjectOf value -> Bool forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a /= :: ObjectOf value -> ObjectOf value -> Bool $c/= :: forall value. Eq value => ObjectOf value -> ObjectOf value -> Bool == :: ObjectOf value -> ObjectOf value -> Bool $c== :: forall value. Eq value => ObjectOf value -> ObjectOf value -> Bool Eq, (forall x. ObjectOf value -> Rep (ObjectOf value) x) -> (forall x. Rep (ObjectOf value) x -> ObjectOf value) -> Generic (ObjectOf value) forall x. Rep (ObjectOf value) x -> ObjectOf value forall x. ObjectOf value -> Rep (ObjectOf value) x forall a. (forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a forall value x. Rep (ObjectOf value) x -> ObjectOf value forall value x. ObjectOf value -> Rep (ObjectOf value) x $cto :: forall value x. Rep (ObjectOf value) x -> ObjectOf value $cfrom :: forall value x. ObjectOf value -> Rep (ObjectOf value) x Generics.Generic, ObjectOf value -> Q Exp ObjectOf value -> Q (TExp (ObjectOf value)) (ObjectOf value -> Q Exp) -> (ObjectOf value -> Q (TExp (ObjectOf value))) -> Lift (ObjectOf value) forall value. Lift value => ObjectOf value -> Q Exp forall value. Lift value => ObjectOf value -> Q (TExp (ObjectOf value)) forall t. (t -> Q Exp) -> (t -> Q (TExp t)) -> Lift t liftTyped :: ObjectOf value -> Q (TExp (ObjectOf value)) $cliftTyped :: forall value. Lift value => ObjectOf value -> Q (TExp (ObjectOf value)) lift :: ObjectOf value -> Q Exp $clift :: forall value. Lift value => ObjectOf value -> Q Exp TH.Lift, ObjectOf value -> () (ObjectOf value -> ()) -> NFData (ObjectOf value) forall value. NFData value => ObjectOf value -> () forall a. (a -> ()) -> NFData a rnf :: ObjectOf value -> () $crnf :: forall value. NFData value => ObjectOf value -> () DeepSeq.NFData, Int -> ObjectOf value -> ShowS [ObjectOf value] -> ShowS ObjectOf value -> String (Int -> ObjectOf value -> ShowS) -> (ObjectOf value -> String) -> ([ObjectOf value] -> ShowS) -> Show (ObjectOf value) forall value. Show value => Int -> ObjectOf value -> ShowS forall value. Show value => [ObjectOf value] -> ShowS forall value. Show value => ObjectOf value -> String forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [ObjectOf value] -> ShowS $cshowList :: forall value. Show value => [ObjectOf value] -> ShowS show :: ObjectOf value -> String $cshow :: forall value. Show value => ObjectOf value -> String showsPrec :: Int -> ObjectOf value -> ShowS $cshowsPrec :: forall value. Show value => Int -> ObjectOf value -> ShowS Show) encode :: (value -> Encoder.Encoder ()) -> ObjectOf value -> Encoder.Encoder () encode :: (value -> Encoder ()) -> ObjectOf value -> Encoder () encode value -> Encoder () f (Object [MemberOf value] xs) = Encoder () -> Encoder () -> Encoder () -> (MemberOf value -> Encoder ()) -> [MemberOf 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 ()) -> MemberOf value -> Encoder () forall value. (value -> Encoder ()) -> MemberOf value -> Encoder () Member.encode value -> Encoder () f) [MemberOf value] xs encodeElement :: (value -> Encoder.Encoder ()) -> Int -> Member.MemberOf value -> Encoder.Encoder () encodeElement :: (value -> Encoder ()) -> Int -> MemberOf value -> Encoder () encodeElement value -> Encoder () f Int i MemberOf 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 ()) -> MemberOf value -> Encoder () forall value. (value -> Encoder ()) -> MemberOf value -> Encoder () Member.encode value -> Encoder () f MemberOf value x decode :: Decoder.Decoder value -> Decoder.Decoder (ObjectOf value) decode :: Decoder value -> Decoder (ObjectOf value) decode Decoder value f = do Word8 -> Decoder () Decoder.word8 Word8 Literal.leftCurlyBracket Decoder () Decoder.spaces [MemberOf value] xs <- Decoder (MemberOf value) -> Decoder [MemberOf value] forall a. Decoder a -> Decoder [a] Decoder.list (Decoder (MemberOf value) -> Decoder [MemberOf value]) -> Decoder (MemberOf value) -> Decoder [MemberOf value] forall a b. (a -> b) -> a -> b $ Decoder value -> Decoder (MemberOf value) forall value. Decoder value -> Decoder (MemberOf value) Member.decode Decoder value f Word8 -> Decoder () Decoder.word8 Word8 Literal.rightCurlyBracket Decoder () Decoder.spaces ObjectOf value -> Decoder (ObjectOf value) forall (f :: * -> *) a. Applicative f => a -> f a pure (ObjectOf value -> Decoder (ObjectOf value)) -> ObjectOf value -> Decoder (ObjectOf value) forall a b. (a -> b) -> a -> b $ [MemberOf value] -> ObjectOf value forall value. [MemberOf value] -> ObjectOf value Object [MemberOf value] xs