Copyright | (c) Eric Mertens 2019 |
---|---|
License | ISC |
Maintainer | emertens@gmail.com |
Safe Haskell | None |
Language | Haskell2010 |
This module provides a complete skeleton of the failures that
occurred when trying to match a Value
against a ValueSpec
allowing custom error rendering to be implemented.
The structure is you get a single value and a list of one-or-more primitive specifications that it failed to match along with an enumeration of why that specification failed to match. Some failures are due to failures in nested specifications, so the whole error structure can form a tree.
Synopsis
- data ValueSpecMismatch p = ValueSpecMismatch p Text (NonEmpty (PrimMismatch p))
- data PrimMismatch p = PrimMismatch Text (Problem p)
- data Problem p
- class (Typeable a, Show a) => ErrorAnnotation a where
- displayAnnotation :: a -> Doc
- prettyValueSpecMismatch :: ErrorAnnotation p => ValueSpecMismatch p -> Doc
- prettyPrimMismatch :: ErrorAnnotation p => PrimMismatch p -> Doc
- prettyProblem :: ErrorAnnotation p => Problem p -> (Doc, Doc)
- describeSpec :: PrimValueSpec a -> Text
- describeValue :: Value p -> Text
Error types
data ValueSpecMismatch p Source #
Newtype wrapper for schema load errors.
ValueSpecMismatch p Text (NonEmpty (PrimMismatch p)) | Problem value and list of specification failures |
Instances
Show p => Show (ValueSpecMismatch p) Source # | |
Defined in Config.Schema.Load.Error showsPrec :: Int -> ValueSpecMismatch p -> ShowS # show :: ValueSpecMismatch p -> String # showList :: [ValueSpecMismatch p] -> ShowS # | |
ErrorAnnotation p => Exception (ValueSpecMismatch p) Source # |
|
Defined in Config.Schema.Load.Error toException :: ValueSpecMismatch p -> SomeException # fromException :: SomeException -> Maybe (ValueSpecMismatch p) # displayException :: ValueSpecMismatch p -> String # |
data PrimMismatch p Source #
Type for errors that can be encountered while decoding a value according to a specification. The error includes a key path indicating where in the configuration file the error occurred.
PrimMismatch Text (Problem p) | spec description and problem |
Instances
Show p => Show (PrimMismatch p) Source # | |
Defined in Config.Schema.Load.Error showsPrec :: Int -> PrimMismatch p -> ShowS # show :: PrimMismatch p -> String # showList :: [PrimMismatch p] -> ShowS # |
MissingSection Text | missing section name |
UnusedSections (NonEmpty Text) | unused section names |
SubkeyProblem Text (ValueSpecMismatch p) | nested error in given section |
ListElementProblem Int (ValueSpecMismatch p) | nested error in given list element |
NestedProblem (ValueSpecMismatch p) | generic nested error |
TypeMismatch | value and spec type mismatch |
CustomProblem Text | custom spec error message |
WrongAtom | atoms didn't match |
class (Typeable a, Show a) => ErrorAnnotation a where Source #
Class for rendering position annotations within the prettyValueSpecMismatch
displayAnnotation :: a -> Doc Source #
Instances
ErrorAnnotation () Source # | Renders as an empty document |
Defined in Config.Schema.Load.Error displayAnnotation :: () -> Doc Source # | |
ErrorAnnotation Position Source # | Renders a |
Defined in Config.Schema.Load.Error displayAnnotation :: Position -> Doc Source # |
Detailed rendering
prettyValueSpecMismatch :: ErrorAnnotation p => ValueSpecMismatch p -> Doc Source #
Pretty-printer for ValueSpecMismatch
showing the position
and type of value that failed to match along with details about
each specification that it didn't match.
prettyPrimMismatch :: ErrorAnnotation p => PrimMismatch p -> Doc Source #
Pretty-printer for PrimMismatch
showing a summary of the primitive
specification that didn't match followed by a more detailed error when
appropriate.
:: ErrorAnnotation p | |
=> Problem p | |
-> (Doc, Doc) | summary, detailed |
Pretty-printer for Problem
that generates a summary line
as well as a detailed description (depending on the error)
Summaries
describeSpec :: PrimValueSpec a -> Text Source #
Describe outermost shape of a PrimValueSpec