cards2pack_core/
errors.rs1use thiserror::Error;
4
5#[derive(Debug, Error)]
6pub enum ConvertError {
7 #[error("E_NO_CARDS: no cards provided")]
8 NoCards,
9 #[error("E_NO_ENTRY: cannot detect entry card from {count} cards")]
10 NoEntryCard { count: usize },
11 #[error("E_DANGLING_ROUTE: card '{from}' routes to unknown card '{to}'")]
12 DanglingRoute { from: String, to: String },
13 #[error("E_INVALID_CARD: card '{id}' is not a valid AdaptiveCard JSON: {msg}")]
14 InvalidCard { id: String, msg: String },
15 #[error("E_INVALID_HTTP: card '{id}' has invalid HTTP config: {msg}")]
16 InvalidHttp { id: String, msg: String },
17 #[error("E_PARSE: cannot parse cards JSON: {0}")]
18 Parse(String),
19 #[error("E_EMIT: cannot serialize flow YAML: {0}")]
20 Emit(String),
21}
22
23impl ConvertError {
24 pub fn code(&self) -> &'static str {
25 match self {
26 ConvertError::NoCards => "E_NO_CARDS",
27 ConvertError::NoEntryCard { .. } => "E_NO_ENTRY",
28 ConvertError::DanglingRoute { .. } => "E_DANGLING_ROUTE",
29 ConvertError::InvalidCard { .. } => "E_INVALID_CARD",
30 ConvertError::InvalidHttp { .. } => "E_INVALID_HTTP",
31 ConvertError::Parse(_) => "E_PARSE",
32 ConvertError::Emit(_) => "E_EMIT",
33 }
34 }
35}
36
37#[cfg(test)]
38mod tests {
39 use super::*;
40
41 #[test]
42 fn code_round_trip() {
43 assert_eq!(ConvertError::NoCards.code(), "E_NO_CARDS");
44 assert_eq!(ConvertError::NoEntryCard { count: 0 }.code(), "E_NO_ENTRY");
45 assert_eq!(
46 ConvertError::DanglingRoute {
47 from: "a".into(),
48 to: "b".into()
49 }
50 .code(),
51 "E_DANGLING_ROUTE"
52 );
53 }
54}