-- |
-- Module      : Data.TypeID.Error
-- License     : MIT
-- Maintainer  : mmzk1526@outlook.com
-- Portability : GHC
--
-- TypeID Error type.
--
module Data.TypeID.Error
 (
  -- * Data type
  TypeIDError(..)
 ) where

import           Control.Exception
import           Data.Text (Text)

-- | Errors from parsing TypeIDs.
data TypeIDError
  = -- | The prefix longer than 63 characters.
    TypeIDErrorPrefixTooLong Int
    -- | The ID contains an extra underscore separator.
  | TypeIDExtraSeparator
    -- | The prefix contains an invalid character, namely not lowercase Latin.
  | TypeIDErrorPrefixInvalidChar Char
    -- | From a `Data.KindID.KindID` conversion. The prefix doesn't match with
    -- the expected.
  | TypeIDErrorPrefixMismatch Text Text
    -- | The 'Data.UUID.Types.Internal.UUID' suffix has errors.
  | TypeIDErrorUUIDError
  deriving (TypeIDError -> TypeIDError -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: TypeIDError -> TypeIDError -> Bool
$c/= :: TypeIDError -> TypeIDError -> Bool
== :: TypeIDError -> TypeIDError -> Bool
$c== :: TypeIDError -> TypeIDError -> Bool
Eq, Eq TypeIDError
TypeIDError -> TypeIDError -> Bool
TypeIDError -> TypeIDError -> Ordering
TypeIDError -> TypeIDError -> TypeIDError
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: TypeIDError -> TypeIDError -> TypeIDError
$cmin :: TypeIDError -> TypeIDError -> TypeIDError
max :: TypeIDError -> TypeIDError -> TypeIDError
$cmax :: TypeIDError -> TypeIDError -> TypeIDError
>= :: TypeIDError -> TypeIDError -> Bool
$c>= :: TypeIDError -> TypeIDError -> Bool
> :: TypeIDError -> TypeIDError -> Bool
$c> :: TypeIDError -> TypeIDError -> Bool
<= :: TypeIDError -> TypeIDError -> Bool
$c<= :: TypeIDError -> TypeIDError -> Bool
< :: TypeIDError -> TypeIDError -> Bool
$c< :: TypeIDError -> TypeIDError -> Bool
compare :: TypeIDError -> TypeIDError -> Ordering
$ccompare :: TypeIDError -> TypeIDError -> Ordering
Ord)

instance Show TypeIDError where
  show :: TypeIDError -> String
  show :: TypeIDError -> String
show (TypeIDErrorPrefixTooLong Int
n)
    = forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat [String
"Prefix with ", forall a. Show a => a -> String
show Int
n, String
" characters is too long!"]
  show TypeIDError
TypeIDExtraSeparator
    = String
"The underscore separator should not be present if the prefix is empty!"
  show (TypeIDErrorPrefixInvalidChar Char
c)
    = forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat [String
"Prefix contains invalid character ", forall a. Show a => a -> String
show Char
c, String
"!"]
  show (TypeIDErrorPrefixMismatch Text
expPrefix Text
actPrefix)
    = forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat [ String
"Expected prefix ", forall a. Show a => a -> String
show Text
expPrefix, String
" but got "
             , forall a. Show a => a -> String
show Text
actPrefix, String
"!" ]
  show TypeIDError
TypeIDErrorUUIDError
    = String
"Invalid UUID part!"
  {-# INLINE show #-}

instance Exception TypeIDError