packages feed

ribosome-0.4.0.0: lib/Ribosome/Data/Errors.hs

module Ribosome.Data.Errors(
  ComponentName(..),
  Errors(..),
  Error(..),
  componentErrors,
  timestamp,
  report,
) where

import qualified Data.Map.Strict as Map (toList)
import Data.Text.Prettyprint.Doc (Doc, Pretty(..), align, line, vsep, (<+>))
import Prelude hiding (error)

import Ribosome.Data.ErrorReport (ErrorReport(ErrorReport))

newtype ComponentName =
  ComponentName Text
  deriving (Eq, Ord, Show)

data Error =
  Error {
    _timestamp :: Int,
    _report :: ErrorReport
  }
  deriving (Eq, Show)

makeClassy ''Error

instance Pretty Error where
  pretty (Error stamp (ErrorReport _ lines' _)) =
    pretty stamp <+> align (vsep (pretty <$> lines'))

newtype Errors =
  Errors {
    _componentErrors :: Map ComponentName [Error]
    }
  deriving (Eq, Show)
  deriving newtype Default

makeClassy ''Errors

prettyComponentErrors :: ComponentName -> [Error] -> Doc a
prettyComponentErrors (ComponentName name) errors' =
  line <> line <> pretty name <> ":" <> line <> vsep (pretty <$> errors')

instance Pretty Errors where
  pretty (Errors errors') =
    vsep (uncurry prettyComponentErrors <$> Map.toList errors')