never executed always true always false
    1 module PureClaw.Core.Errors
    2   ( -- * Public errors (safe to send to channel users)
    3     PublicError (..)
    4     -- * Conversion typeclass
    5   , ToPublicError (..)
    6   ) where
    7 
    8 import Data.Text (Text)
    9 
   10 -- | Errors safe to send to external users via channels.
   11 -- Contains no internal detail — model names, URLs, stack traces, etc.
   12 -- are stripped by 'ToPublicError' instances on internal error types.
   13 data PublicError
   14   = TemporaryError Text   -- ^ Generic temporary error with user-facing message
   15   | RateLimitError        -- ^ Rate limit reached
   16   | NotAllowedError       -- ^ User not authorized
   17   deriving stock (Show, Eq)
   18 
   19 -- | Convert internal errors to channel-safe public errors.
   20 -- Implementations must strip all internal detail.
   21 class ToPublicError e where
   22   toPublicError :: e -> PublicError