packages feed

keiro-dsl-0.18.0.0: test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/Nominals/Internal.hs

-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from context checked-mapping-replay generated nominal ID internals; do not edit.
module Generated.CheckedMappingReplay.Nominals.Internal
  ( RetainedId
  , parseRetainedId
  , mkRetainedId
  , retainedIdText
  , unsafeRetainedIdFromLegacyText
  ) 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 (typeIdV5OrV7Domain, validateIdDomainText)

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

instance CanonicalTypeName RetainedId

instance ToJSON RetainedId where
  toJSON = toJSON . retainedIdText

instance FromJSON RetainedId where
  parseJSON = withText "RetainedId" (either (fail . T.unpack) pure . parseRetainedId)

parseRetainedId :: Text -> Either Text RetainedId
parseRetainedId input = case validateIdDomainText (typeIdV5OrV7Domain "retained") input of
  Left reason -> Left (T.pack (show reason))
  Right () -> Right (RetainedId input)

mkRetainedId :: Text -> Either Text RetainedId
mkRetainedId = parseRetainedId

retainedIdText :: RetainedId -> Text
retainedIdText (RetainedId value) = value

unsafeRetainedIdFromLegacyText :: Text -> RetainedId
unsafeRetainedIdFromLegacyText = RetainedId