packages feed

keiro-dsl-0.9.0.0: test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/Nominals/Internal.hs

{-# LANGUAGE DeriveGeneric #-}
-- @generated by keiro-dsl 0.8.0.0 (language keiro-dsl 4) from context workspace-nominal-proof generated nominal ID internals; do not edit.
module Generated.WorkspaceNominalProof.Nominals.Internal
  ( ProjectId
  , parseProjectId
  , mkProjectId
  , projectIdText
  , unsafeProjectIdFromLegacyText
  ) where

import Data.Aeson (FromJSON (..), ToJSON (..), withText)
import Data.Text (Text)
import Data.Text qualified as T
import GHC.Generics (Generic)
import Keiro.Codec.IdDomain (typeIdV7Domain, validateIdDomainText)

newtype ProjectId = ProjectId Text
  deriving stock (Generic, Eq, Ord, Show)

instance ToJSON ProjectId where
  toJSON = toJSON . projectIdText

instance FromJSON ProjectId where
  parseJSON = withText "ProjectId" (either (fail . T.unpack) pure . parseProjectId)

parseProjectId :: Text -> Either Text ProjectId
parseProjectId input = case validateIdDomainText (typeIdV7Domain "proj") input of
  Left reason -> Left (T.pack (show reason))
  Right () -> Right (ProjectId input)

mkProjectId :: Text -> Either Text ProjectId
mkProjectId = parseProjectId

projectIdText :: ProjectId -> Text
projectIdText (ProjectId value) = value

unsafeProjectIdFromLegacyText :: Text -> ProjectId
unsafeProjectIdFromLegacyText = ProjectId