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