• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //! # Custom Errors
2 //!
3 //! A lot can be accomplished with the built-in error tools, like:
4 //! - [`ContextError`]
5 //! - [`Parser::context`]
6 //! - [`cut_err`]
7 //!
8 //! *(see [tutorial][chapter_7])*
9 //!
10 //! Most other needs can likely be met by using a custom context type with [`ContextError`] instead
11 //! of [`StrContext`].
12 //! This will require implementing a custom renderer.
13 //!
14 //! ## `ParserError` Trait
15 //!
16 //! When needed, you can also create your own type that implements [`ParserError`].
17 //!
18 //! Optional traits include:
19 //! - [`AddContext`]
20 //! - [`FromExternalError`]
21 //! - [`ErrorConvert`]
22 //!
23 //! There are multiple strategies for implementing support for [`AddContext`] and [`FromExternalError`]:
24 //! - Make your error type generic over the context or external error
25 //! - Require a trait for the context or external error and `Box` it
26 //! - Make the context an enum like [`StrContext`]
27 //! - Implement the trait multiple times, one for each concrete context or external error type,
28 //!   allowing custom behavior per type
29 //!
30 //! Example:
31 //!```rust
32 #![doc = include_str!("../../examples/custom_error.rs")]
33 //!```
34 
35 #![allow(unused_imports)]
36 use crate::combinator::cut_err;
37 use crate::error::ContextError;
38 use crate::error::ErrorConvert;
39 use crate::error::StrContext;
40 use crate::Parser;
41 use crate::_tutorial::chapter_7;
42 use crate::error::AddContext;
43 use crate::error::FromExternalError;
44 use crate::error::ParserError;
45