oo_bindgen/model/
back_traced.rs

1use std::fmt::Formatter;
2
3use backtrace::Backtrace;
4
5use crate::model::{BadName, BindingError, BindingErrorVariant};
6
7pub type BackTraced<T> = Result<T, BackTracedBindingError>;
8
9#[derive(Debug)]
10pub struct BackTracedBindingError {
11    pub(crate) error: BindingError,
12    pub(crate) backtrace: Backtrace,
13}
14
15impl From<BindingErrorVariant> for BackTracedBindingError {
16    fn from(error: BindingErrorVariant) -> Self {
17        BackTracedBindingError {
18            error: error.into(),
19            backtrace: Backtrace::new(),
20        }
21    }
22}
23
24impl From<BindingError> for BackTracedBindingError {
25    fn from(error: BindingError) -> Self {
26        BackTracedBindingError {
27            error,
28            backtrace: Backtrace::new(),
29        }
30    }
31}
32
33impl From<BadName> for BackTracedBindingError {
34    fn from(err: BadName) -> Self {
35        BindingErrorVariant::BadName { err }.into()
36    }
37}
38
39impl std::fmt::Display for BackTracedBindingError {
40    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
41        writeln!(f, "{}", self.error)?;
42        writeln!(f, "origin:")?;
43        writeln!(f, "{:?}", self.backtrace)
44    }
45}
46
47impl std::error::Error for BackTracedBindingError {}