packages feed

argo-0.2022.8.28: source/library/Argo/Internal/Json/Name.hs

{-# LANGUAGE DeriveLift #-}

module Argo.Internal.Json.Name where

import qualified Argo.Internal.Json.String as String
import qualified Argo.Internal.Type.Decoder as Decoder
import qualified Argo.Internal.Type.Encoder as Encoder
import qualified Argo.Vendor.DeepSeq as DeepSeq
import qualified Argo.Vendor.TemplateHaskell as TH
import qualified Data.String

newtype Name
    = Name String.String
    deriving (Eq, TH.Lift, Ord, Show)

instance DeepSeq.NFData Name where
    rnf = DeepSeq.rnf . toString

instance Data.String.IsString Name where
    fromString = fromString . Data.String.fromString

fromString :: String.String -> Name
fromString = Name

toString :: Name -> String.String
toString (Name x) = x

encode :: Name -> Encoder.Encoder ()
encode = String.encode . toString

decode :: Decoder.Decoder Name
decode = fromString <$> String.decode