{-# 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 (Name -> Name -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Name -> Name -> Bool
$c/= :: Name -> Name -> Bool
== :: Name -> Name -> Bool
$c== :: Name -> Name -> Bool
Eq, forall t.
(forall (m :: * -> *). Quote m => t -> m Exp)
-> (forall (m :: * -> *). Quote m => t -> Code m t) -> Lift t
forall (m :: * -> *). Quote m => Name -> m Exp
forall (m :: * -> *). Quote m => Name -> Code m Name
liftTyped :: forall (m :: * -> *). Quote m => Name -> Code m Name
$cliftTyped :: forall (m :: * -> *). Quote m => Name -> Code m Name
lift :: forall (m :: * -> *). Quote m => Name -> m Exp
$clift :: forall (m :: * -> *). Quote m => Name -> m Exp
TH.Lift, Eq Name
Name -> Name -> Bool
Name -> Name -> Ordering
Name -> Name -> Name
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: Name -> Name -> Name
$cmin :: Name -> Name -> Name
max :: Name -> Name -> Name
$cmax :: Name -> Name -> Name
>= :: Name -> Name -> Bool
$c>= :: Name -> Name -> Bool
> :: Name -> Name -> Bool
$c> :: Name -> Name -> Bool
<= :: Name -> Name -> Bool
$c<= :: Name -> Name -> Bool
< :: Name -> Name -> Bool
$c< :: Name -> Name -> Bool
compare :: Name -> Name -> Ordering
$ccompare :: Name -> Name -> Ordering
Ord, Int -> Name -> ShowS
[Name] -> ShowS
Name -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Name] -> ShowS
$cshowList :: [Name] -> ShowS
show :: Name -> String
$cshow :: Name -> String
showsPrec :: Int -> Name -> ShowS
$cshowsPrec :: Int -> Name -> ShowS
Show)

instance DeepSeq.NFData Name where
    rnf :: Name -> ()
rnf = forall a. NFData a => a -> ()
DeepSeq.rnf forall b c a. (b -> c) -> (a -> b) -> a -> c
. Name -> String
toString

instance Data.String.IsString Name where
    fromString :: String -> Name
fromString = String -> Name
fromString forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. IsString a => String -> a
Data.String.fromString

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

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

encode :: Name -> Encoder.Encoder ()
encode :: Name -> Encoder ()
encode = String -> Encoder ()
String.encode forall b c a. (b -> c) -> (a -> b) -> a -> c
. Name -> String
toString

decode :: Decoder.Decoder Name
decode :: Decoder Name
decode = String -> Name
fromString forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Decoder String
String.decode