argo-0.2022.8.28: source/library/Argo/Internal/Json/Null.hs
{-# LANGUAGE DeriveLift #-}
module Argo.Internal.Json.Null where
import qualified Argo.Internal.Literal as Literal
import qualified Argo.Internal.Type.Decoder as Decoder
import qualified Argo.Internal.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
newtype Null
= Null ()
deriving (Eq, TH.Lift, Show)
instance DeepSeq.NFData Null where
rnf = DeepSeq.rnf . toUnit
fromUnit :: () -> Null
fromUnit = Null
toUnit :: Null -> ()
toUnit (Null x) = x
encode :: Null -> Encoder.Encoder ()
encode = const . Trans.lift . Trans.tell $ Builder.byteString Literal.null
decode :: Decoder.Decoder Null
decode = fromUnit () <$ Decoder.byteString Literal.null <* Decoder.spaces