cgp_error_std/impls/
display_error.rs1use 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}