packages feed

asana-1.0.0.0: 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