packages feed

keiro-dsl-0.17.0.0: test/conformance-nominal-query-only/Generated/MappedNominalQueryOnly/Nominals/Internal.hs

-- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 6) from context mapped-nominal-query-only generated nominal ID internals; do not edit.
module Generated.MappedNominalQueryOnly.Nominals.Internal
  ( TemplateId
  , parseTemplateId
  , mkTemplateId
  , templateIdText
  , unsafeTemplateIdFromLegacyText
  ) where

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

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

instance CanonicalTypeName TemplateId

instance ToJSON TemplateId where
  toJSON = toJSON . templateIdText

instance FromJSON TemplateId where
  parseJSON = withText "TemplateId" (either (fail . T.unpack) pure . parseTemplateId)

parseTemplateId :: Text -> Either Text TemplateId
parseTemplateId input = case validateIdDomainText (typeIdV7Domain "template") input of
  Left reason -> Left (T.pack (show reason))
  Right () -> Right (TemplateId input)

mkTemplateId :: Text -> Either Text TemplateId
mkTemplateId = parseTemplateId

templateIdText :: TemplateId -> Text
templateIdText (TemplateId value) = value

unsafeTemplateIdFromLegacyText :: Text -> TemplateId
unsafeTemplateIdFromLegacyText = TemplateId