cgp_error_std/impls/
display_error.rs

1use alloc::boxed::Box;
2use alloc::string::ToString;
3use core::fmt::Display;
4
5use cgp_core::error::{ErrorRaiser, ErrorWrapper, HasErrorType};
6
7use crate::types::{Error, StringError};
8use crate::WrapError;
9
10pub struct DisplayBoxedStdError;
11
12impl<Context, E> ErrorRaiser<Context, E> for DisplayBoxedStdError
13where
14    Context: HasErrorType<Error = Error>,
15    E: Display,
16{
17    fn raise_error(e: E) -> Error {
18        Box::new(StringError::from(e.to_string()))
19    }
20}
21
22impl<Context, Detail> ErrorWrapper<Context, Detail> for DisplayBoxedStdError
23where
24    Context: HasErrorType<Error = Error>,
25    Detail: Display,
26{
27    fn wrap_error(error: Error, detail: Detail) -> Error {
28        Box::new(WrapError {
29            detail: detail.to_string(),
30            source: error,
31        })
32    }
33}