packages feed

asana-1.0.1.1: library/Asana/Api/Gid.hs

-- | A globally unique identifier
module Asana.Api.Gid
  ( Gid,
    AsanaReference (..),
    gidToText,
    textToGid,
  )
where

import Asana.Api.Prelude
import Data.Aeson
  ( FromJSON (..),
    FromJSONKey,
    ToJSON,
    ToJSONKey,
    genericParseJSON,
  )
import Data.Aeson.Casing (aesonPrefix, snakeCase)
import Data.Hashable (Hashable)

newtype Gid = Gid {gidToText :: Text}
  deriving stock (Eq, Generic, Show)
  deriving newtype (FromJSON, ToJSON, ToJSONKey, FromJSONKey, Hashable)

-- | An object @{ gid: <Gid> }@
newtype AsanaReference = AsanaReference {arGid :: Gid}
  deriving stock (Eq, Generic, Show)

instance FromJSON AsanaReference where
  parseJSON = genericParseJSON $ aesonPrefix snakeCase

textToGid :: Text -> Gid
textToGid = Gid