{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DeriveLift #-}

module Argo.Json.Null where

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 GHC.Generics as Generics

newtype Null
    = Null ()
    deriving (Null -> Null -> Bool
(Null -> Null -> Bool) -> (Null -> Null -> Bool) -> Eq Null
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Null -> Null -> Bool
$c/= :: Null -> Null -> Bool
== :: Null -> Null -> Bool
$c== :: Null -> Null -> Bool
Eq, (forall x. Null -> Rep Null x)
-> (forall x. Rep Null x -> Null) -> Generic Null
forall x. Rep Null x -> Null
forall x. Null -> Rep Null x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Null x -> Null
$cfrom :: forall x. Null -> Rep Null x
Generics.Generic, Null -> Q Exp
Null -> Q (TExp Null)
(Null -> Q Exp) -> (Null -> Q (TExp Null)) -> Lift Null
forall t. (t -> Q Exp) -> (t -> Q (TExp t)) -> Lift t
liftTyped :: Null -> Q (TExp Null)
$cliftTyped :: Null -> Q (TExp Null)
lift :: Null -> Q Exp
$clift :: Null -> Q Exp
TH.Lift, Null -> ()
(Null -> ()) -> NFData Null
forall a. (a -> ()) -> NFData a
rnf :: Null -> ()
$crnf :: Null -> ()
DeepSeq.NFData, Int -> Null -> ShowS
[Null] -> ShowS
Null -> String
(Int -> Null -> ShowS)
-> (Null -> String) -> ([Null] -> ShowS) -> Show Null
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Null] -> ShowS
$cshowList :: [Null] -> ShowS
show :: Null -> String
$cshow :: Null -> String
showsPrec :: Int -> Null -> ShowS
$cshowsPrec :: Int -> Null -> ShowS
Show)

fromUnit :: () -> Null
fromUnit :: () -> Null
fromUnit = () -> Null
Null

toUnit :: Null -> ()
toUnit :: Null -> ()
toUnit (Null ()
x) = ()
x

encode :: Null -> Encoder.Encoder ()
encode :: Null -> Encoder ()
encode = Encoder () -> Null -> Encoder ()
forall a b. a -> b -> a
const (Encoder () -> Null -> Encoder ())
-> (Builder -> Encoder ()) -> Builder -> Null -> 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 -> Null -> Encoder ()) -> Builder -> Null -> Encoder ()
forall a b. (a -> b) -> a -> b
$ ByteString -> Builder
Builder.byteString ByteString
Literal.null

decode :: Decoder.Decoder Null
decode :: Decoder Null
decode = () -> Null
fromUnit () Null
-> StateT ByteString (ExceptT String Identity) () -> Decoder Null
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ ByteString -> StateT ByteString (ExceptT String Identity) ()
Decoder.byteString ByteString
Literal.null Decoder Null
-> StateT ByteString (ExceptT String Identity) () -> Decoder Null
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* StateT ByteString (ExceptT String Identity) ()
Decoder.spaces