1use std::sync::Arc;
2
3use crate::ffi;
4
5pub type Status = i32;
10
11#[derive(Debug, thiserror::Error, Clone)]
16pub enum Error {
17 #[error("closed")]
19 Closed,
20
21 #[error("moq error: {0}")]
23 Moq(#[from] moq_lite::Error),
24
25 #[error("url error: {0}")]
27 Url(#[from] url::ParseError),
28
29 #[error("utf8 error: {0}")]
31 Utf8(#[from] std::str::Utf8Error),
32
33 #[error("connect error: {0}")]
35 Connect(Arc<anyhow::Error>),
36
37 #[error("invalid pointer")]
39 InvalidPointer,
40
41 #[error("invalid id")]
43 InvalidId,
44
45 #[error("not found")]
47 NotFound,
48
49 #[error("unknown format: {0}")]
51 UnknownFormat(String),
52
53 #[error("init failed: {0}")]
55 InitFailed(Arc<anyhow::Error>),
56
57 #[error("decode failed: {0}")]
59 DecodeFailed(Arc<anyhow::Error>),
60
61 #[error("timestamp overflow")]
63 TimestampOverflow(#[from] hang::TimestampOverflow),
64
65 #[error("level error: {0}")]
67 Level(Arc<tracing::metadata::ParseLevelError>),
68
69 #[error("invalid code")]
71 InvalidCode,
72
73 #[error("panic")]
75 Panic,
76
77 #[error("offline")]
79 Offline,
80
81 #[error("hang error: {0}")]
83 Hang(#[from] hang::Error),
84
85 #[error("no index")]
87 NoIndex,
88
89 #[error("nul error")]
91 NulError(#[from] std::ffi::NulError),
92}
93
94impl From<tracing::metadata::ParseLevelError> for Error {
95 fn from(err: tracing::metadata::ParseLevelError) -> Self {
96 Error::Level(Arc::new(err))
97 }
98}
99
100impl ffi::ReturnCode for Error {
101 fn code(&self) -> i32 {
102 tracing::error!("{}", self);
103 match self {
104 Error::Closed => -1,
105 Error::Moq(_) => -2,
106 Error::Url(_) => -3,
107 Error::Utf8(_) => -4,
108 Error::Connect(_) => -5,
109 Error::InvalidPointer => -6,
110 Error::InvalidId => -7,
111 Error::NotFound => -8,
112 Error::UnknownFormat(_) => -9,
113 Error::InitFailed(_) => -10,
114 Error::DecodeFailed(_) => -11,
115 Error::TimestampOverflow(_) => -13,
116 Error::Level(_) => -14,
117 Error::InvalidCode => -15,
118 Error::Panic => -16,
119 Error::Offline => -17,
120 Error::Hang(_) => -18,
121 Error::NoIndex => -19,
122 Error::NulError(_) => -20,
123 }
124 }
125}