packages feed

keiro-dsl-0.18.0.0: test/conformance-bare-containers/Generated/BareContainers/Nominals/Internal.hs

-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from context bare-containers generated nominal ID internals; do not edit.
module Generated.BareContainers.Nominals.Internal
  ( ItemId
  , parseItemId
  , mkItemId
  , itemIdText
  , unsafeItemIdFromLegacyText
  ) 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 ItemId = ItemId Text
  deriving stock (Generic, Eq, Ord, Show)

instance CanonicalTypeName ItemId

instance ToJSON ItemId where
  toJSON = toJSON . itemIdText

instance FromJSON ItemId where
  parseJSON = withText "ItemId" (either (fail . T.unpack) pure . parseItemId)

parseItemId :: Text -> Either Text ItemId
parseItemId input = case validateIdDomainText (typeIdV7Domain "item") input of
  Left reason -> Left (T.pack (show reason))
  Right () -> Right (ItemId input)

mkItemId :: Text -> Either Text ItemId
mkItemId = parseItemId

itemIdText :: ItemId -> Text
itemIdText (ItemId value) = value

unsafeItemIdFromLegacyText :: Text -> ItemId
unsafeItemIdFromLegacyText = ItemId