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