1#[derive(thiserror::Error, Debug)]
2pub enum XenError {
3 #[error(transparent)]
4 Xen(#[from] XcError),
5
6 #[error(transparent)]
7 Io(#[from] std::io::Error),
8
9 #[error("{0}")]
10 Other(&'static str),
11}
12
13#[derive(Debug)]
14pub struct XcError {
15 #[expect(unused)]
16 pub(crate) rc: i32,
17 #[expect(unused)]
18 pub(crate) code: u32,
19 pub(crate) desc: &'static str,
20 #[expect(unused)]
21 pub(crate) backtrace: std::backtrace::Backtrace,
22}
23
24impl std::error::Error for XcError {}
25
26impl std::fmt::Display for XcError {
27 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
28 write!(f, "{}", self.desc)
29 }
30}
31
32impl XcError {
33 pub fn new(rc: i32, code: u32, desc: &'static str) -> Self {
34 Self {
35 rc,
36 code,
37 desc,
38 backtrace: std::backtrace::Backtrace::capture(),
39 }
40 }
41}