packages feed

argo-0.2021.10.17: source/library/Argo/Type/Null.hs

{-# LANGUAGE TemplateHaskellQuotes #-}

module Argo.Type.Null where

import qualified Argo.Decoder as Decoder
import qualified Argo.Literal as Literal
import qualified Control.DeepSeq as DeepSeq
import qualified Data.ByteString.Builder as Builder
import qualified Language.Haskell.TH.Syntax as TH

newtype Null
    = Null ()
    deriving (Eq, Show)

instance TH.Lift Null where
    liftTyped (Null x) = [|| Null x ||]

instance DeepSeq.NFData Null where
    rnf (Null x) = DeepSeq.rnf x

encode :: Null -> Builder.Builder
encode = const $ Builder.byteString Literal.null

decode :: Decoder.Decoder Null
decode = Null () <$ Decoder.byteString Literal.null <* Decoder.spaces