cgp_error_std/impls/
display_error.rs

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