-- This Source Code Form is subject to the terms of the Mozilla Public
-- License, v. 2.0. If a copy of the MPL was not distributed with this
-- file, You can obtain one at http://mozilla.org/MPL/2.0/.
{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE DerivingStrategies #-}
module Data.Severity
( Severity (..)
, HasSeverityAnnotation (..)
) where
import Prelude
import Data.Aeson
( FromJSON, ToJSON )
import GHC.Generics
( Generic )
-- | Define a log-level severity.
--
-- +----------+----------------------------------------------------------------------------------+
-- | Severity | Semantic |
-- +==========+==================================================================================+
-- | Debug | Messages that contain information normally of use only when debugging a program. |
-- | Info | Informational messages. |
-- | Notice | Normal but significant conditions. |
-- | Warning | A situation that may become an error. |
-- | Error | Unexpected problem. |
-- +----------+----------------------------------------------------------------------------------+
--
data Severity
= Debug
| Info
| Notice
| Warning
| Error
deriving stock (Generic, Eq, Ord, Enum, Bounded, Show, Read)
deriving anyclass (ToJSON, FromJSON)
-- | Associate a 'Severity' to a typed log message.
--
-- data MyLog = MyLog
-- instance HasSeverityAnnotation MyLog where
-- getSeverityAnnotation = \case
-- MyLog -> Info
--
class HasSeverityAnnotation a where
getSeverityAnnotation :: a -> Severity