cgp_error_std/impls/
debug_error.rs

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