packages feed

keiro-dsl-0.9.0.0: test/conformance-id-domain-migration/Generated/IdDomainMigration/Nominals/Internal.hs

{-# LANGUAGE DeriveGeneric #-}

-- @generated by keiro-dsl 0.8.0.0 (language keiro-dsl 3) from context id-domain-migration generated nominal ID internals; do not edit.
module Generated.IdDomainMigration.Nominals.Internal
  ( OrderId,
    parseOrderId,
    mkOrderId,
    orderIdText,
    unsafeOrderIdFromLegacyText,
  )
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 OrderId = OrderId Text
  deriving stock (Generic, Eq, Ord, Show)

instance ToJSON OrderId where
  toJSON = toJSON . orderIdText

instance FromJSON OrderId where
  parseJSON = withText "OrderId" (either (fail . T.unpack) pure . parseOrderId)

parseOrderId :: Text -> Either Text OrderId
parseOrderId input = case validateIdDomainText (typeIdV7Domain "ord") input of
  Left reason -> Left (T.pack (show reason))
  Right () -> Right (OrderId input)

mkOrderId :: Text -> Either Text OrderId
mkOrderId = parseOrderId

orderIdText :: OrderId -> Text
orderIdText (OrderId value) = value

unsafeOrderIdFromLegacyText :: Text -> OrderId
unsafeOrderIdFromLegacyText = OrderId