string_eyre/
lib.rs

1/// This crate provides convenience traits for pushing into `eyre`
2/// errors that shouldn't go into `eyre` by stringifying them.
3
4use std::fmt::{Debug, Display};
5
6use eyre::{eyre, Report};
7
8pub trait DisplayToEyre<T, E: Display>: private::Sealed {
9    /// Convert the error value to `eyre::Report` of its `Display` representation.
10    fn display_to_eyre(self) -> Result<T, Report>;
11}
12
13pub trait DebugToEyre<T, E: Debug>: private::Sealed {
14    /// Convert the error value to `eyre::Report` of its `Debug` representation.
15    fn debug_to_eyre(self) -> Result<T, Report>;
16}
17
18impl<T, E: Display> DisplayToEyre<T, E> for Result<T, E> {
19    #[inline]
20    fn display_to_eyre(self) -> Result<T, Report> {
21        self.map_err(|e| eyre!("{}", e))
22    }
23}
24
25impl<T, E: Debug> DebugToEyre<T, E> for Result<T, E> {
26    #[inline]
27    fn debug_to_eyre(self) -> Result<T, Report> {
28        self.map_err(|e| eyre!("{:?}", e))
29    }
30}
31
32mod private {
33    pub trait Sealed {}
34    impl<T, E> Sealed for Result<T, E> {}
35}