oo_bindgen/model/
back_traced.rs1use 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 {}