-- | Anything with a compact @{ id, name }@ representation
module Asana.Api.Named
  ( Named (..),
  )
where

import Asana.Api.Gid (Gid)
import Asana.Api.Prelude
import Data.Aeson (FromJSON, genericParseJSON, parseJSON)
import Data.Aeson.Casing (aesonPrefix, snakeCase)

data Named = Named
  { Named -> Gid
nGid :: Gid,
    Named -> Text
nName :: Text
  }
  deriving stock (Named -> Named -> Bool
(Named -> Named -> Bool) -> (Named -> Named -> Bool) -> Eq Named
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Named -> Named -> Bool
== :: Named -> Named -> Bool
$c/= :: Named -> Named -> Bool
/= :: Named -> Named -> Bool
Eq, (forall x. Named -> Rep Named x)
-> (forall x. Rep Named x -> Named) -> Generic Named
forall x. Rep Named x -> Named
forall x. Named -> Rep Named x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. Named -> Rep Named x
from :: forall x. Named -> Rep Named x
$cto :: forall x. Rep Named x -> Named
to :: forall x. Rep Named x -> Named
Generic, Int -> Named -> ShowS
[Named] -> ShowS
Named -> String
(Int -> Named -> ShowS)
-> (Named -> String) -> ([Named] -> ShowS) -> Show Named
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Named -> ShowS
showsPrec :: Int -> Named -> ShowS
$cshow :: Named -> String
show :: Named -> String
$cshowList :: [Named] -> ShowS
showList :: [Named] -> ShowS
Show)

instance FromJSON Named where
  parseJSON :: Value -> Parser Named
parseJSON = Options -> Value -> Parser Named
forall a.
(Generic a, GFromJSON Zero (Rep a)) =>
Options -> Value -> Parser a
genericParseJSON (Options -> Value -> Parser Named)
-> Options -> Value -> Parser Named
forall a b. (a -> b) -> a -> b
$ ShowS -> Options
aesonPrefix ShowS
snakeCase