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