omni_dev/snowflake/client/
error.rs1pub type Result<T> = std::result::Result<T, Error>;
5
6#[derive(Debug, thiserror::Error)]
8pub enum Error {
9 #[error("snowflake transport error: {0}")]
11 Transport(#[from] reqwest::Error),
12
13 #[error("snowflake server error ({code}): {message}")]
15 Server {
16 code: String,
18 message: String,
20 },
21
22 #[error("snowflake session expired")]
24 SessionExpired,
25
26 #[error("snowflake protocol error: {0}")]
28 Protocol(String),
29
30 #[error("snowflake external-browser auth error: {0}")]
32 Auth(String),
33
34 #[error("unsupported snowflake feature: {0}")]
36 Unsupported(String),
37
38 #[error("snowflake io error: {0}")]
40 Io(#[from] std::io::Error),
41}
42
43impl Error {
44 #[must_use]
46 pub fn is_session_expired(&self) -> bool {
47 matches!(self, Self::SessionExpired)
48 }
49}
50
51#[cfg(test)]
52mod tests {
53 use super::*;
54
55 #[test]
56 fn is_session_expired_only_for_session_expired() {
57 assert!(Error::SessionExpired.is_session_expired());
58 assert!(!Error::Auth("x".into()).is_session_expired());
59 assert!(!Error::Unsupported("arrow".into()).is_session_expired());
60 assert!(!Error::Protocol("p".into()).is_session_expired());
61 assert!(!Error::Server {
62 code: "390112".into(),
63 message: "m".into(),
64 }
65 .is_session_expired());
66 }
67
68 #[test]
69 fn display_renders_code_and_message() {
70 assert_eq!(
71 Error::SessionExpired.to_string(),
72 "snowflake session expired"
73 );
74 assert_eq!(
75 Error::Server {
76 code: "001003".into(),
77 message: "boom".into(),
78 }
79 .to_string(),
80 "snowflake server error (001003): boom"
81 );
82 assert_eq!(
83 Error::Unsupported("arrow".into()).to_string(),
84 "unsupported snowflake feature: arrow"
85 );
86 }
87}