packages feed

keiro-dsl-0.10.0.0: test/conformance-behavior-complete/Generated/BehaviorComplete/Nominals/Internal.hs

-- @generated by keiro-dsl 0.9.0.0 (language keiro-dsl 4) from context behavior-complete generated nominal ID internals; do not edit.
module Generated.BehaviorComplete.Nominals.Internal
  ( RequestId
  , parseRequestId
  , mkRequestId
  , requestIdText
  , unsafeRequestIdFromLegacyText
  ) 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 RequestId = RequestId Text
  deriving stock (Generic, Eq, Ord, Show)

instance ToJSON RequestId where
  toJSON = toJSON . requestIdText

instance FromJSON RequestId where
  parseJSON = withText "RequestId" (either (fail . T.unpack) pure . parseRequestId)

parseRequestId :: Text -> Either Text RequestId
parseRequestId input = case validateIdDomainText (typeIdV7Domain "req") input of
  Left reason -> Left (T.pack (show reason))
  Right () -> Right (RequestId input)

mkRequestId :: Text -> Either Text RequestId
mkRequestId = parseRequestId

requestIdText :: RequestId -> Text
requestIdText (RequestId value) = value

unsafeRequestIdFromLegacyText :: Text -> RequestId
unsafeRequestIdFromLegacyText = RequestId