module Hix.Data.EnvName where

import Data.Aeson (FromJSON, FromJSONKey)
import Distribution.Pretty (Pretty (pretty))

import Hix.Class.EncodeNix (EncodeNixKey)
import Hix.Pretty (prettyText)

newtype EnvName =
  EnvName { EnvName -> Text
unEnvName :: Text }
  deriving stock (EnvName -> EnvName -> Bool
(EnvName -> EnvName -> Bool)
-> (EnvName -> EnvName -> Bool) -> Eq EnvName
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: EnvName -> EnvName -> Bool
== :: EnvName -> EnvName -> Bool
$c/= :: EnvName -> EnvName -> Bool
/= :: EnvName -> EnvName -> Bool
Eq, Int -> EnvName -> ShowS
[EnvName] -> ShowS
EnvName -> String
(Int -> EnvName -> ShowS)
-> (EnvName -> String) -> ([EnvName] -> ShowS) -> Show EnvName
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> EnvName -> ShowS
showsPrec :: Int -> EnvName -> ShowS
$cshow :: EnvName -> String
show :: EnvName -> String
$cshowList :: [EnvName] -> ShowS
showList :: [EnvName] -> ShowS
Show, (forall x. EnvName -> Rep EnvName x)
-> (forall x. Rep EnvName x -> EnvName) -> Generic EnvName
forall x. Rep EnvName x -> EnvName
forall x. EnvName -> Rep EnvName x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. EnvName -> Rep EnvName x
from :: forall x. EnvName -> Rep EnvName x
$cto :: forall x. Rep EnvName x -> EnvName
to :: forall x. Rep EnvName x -> EnvName
Generic)
  deriving newtype (String -> EnvName
(String -> EnvName) -> IsString EnvName
forall a. (String -> a) -> IsString a
$cfromString :: String -> EnvName
fromString :: String -> EnvName
IsString, Eq EnvName
Eq EnvName =>
(EnvName -> EnvName -> Ordering)
-> (EnvName -> EnvName -> Bool)
-> (EnvName -> EnvName -> Bool)
-> (EnvName -> EnvName -> Bool)
-> (EnvName -> EnvName -> Bool)
-> (EnvName -> EnvName -> EnvName)
-> (EnvName -> EnvName -> EnvName)
-> Ord EnvName
EnvName -> EnvName -> Bool
EnvName -> EnvName -> Ordering
EnvName -> EnvName -> EnvName
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
$ccompare :: EnvName -> EnvName -> Ordering
compare :: EnvName -> EnvName -> Ordering
$c< :: EnvName -> EnvName -> Bool
< :: EnvName -> EnvName -> Bool
$c<= :: EnvName -> EnvName -> Bool
<= :: EnvName -> EnvName -> Bool
$c> :: EnvName -> EnvName -> Bool
> :: EnvName -> EnvName -> Bool
$c>= :: EnvName -> EnvName -> Bool
>= :: EnvName -> EnvName -> Bool
$cmax :: EnvName -> EnvName -> EnvName
max :: EnvName -> EnvName -> EnvName
$cmin :: EnvName -> EnvName -> EnvName
min :: EnvName -> EnvName -> EnvName
Ord, Maybe EnvName
Value -> Parser [EnvName]
Value -> Parser EnvName
(Value -> Parser EnvName)
-> (Value -> Parser [EnvName]) -> Maybe EnvName -> FromJSON EnvName
forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Maybe a -> FromJSON a
$cparseJSON :: Value -> Parser EnvName
parseJSON :: Value -> Parser EnvName
$cparseJSONList :: Value -> Parser [EnvName]
parseJSONList :: Value -> Parser [EnvName]
$comittedField :: Maybe EnvName
omittedField :: Maybe EnvName
FromJSON, FromJSONKeyFunction [EnvName]
FromJSONKeyFunction EnvName
FromJSONKeyFunction EnvName
-> FromJSONKeyFunction [EnvName] -> FromJSONKey EnvName
forall a.
FromJSONKeyFunction a -> FromJSONKeyFunction [a] -> FromJSONKey a
$cfromJSONKey :: FromJSONKeyFunction EnvName
fromJSONKey :: FromJSONKeyFunction EnvName
$cfromJSONKeyList :: FromJSONKeyFunction [EnvName]
fromJSONKeyList :: FromJSONKeyFunction [EnvName]
FromJSONKey, EnvName -> Text
(EnvName -> Text) -> EncodeNixKey EnvName
forall a. (a -> Text) -> EncodeNixKey a
$cencodeNixKey :: EnvName -> Text
encodeNixKey :: EnvName -> Text
EncodeNixKey)

instance Pretty EnvName where
  pretty :: EnvName -> Doc
pretty (EnvName Text
n) = Text -> Doc
prettyText Text
n