switchboard_container_utils/
error.rs1use std::error::Error;
2use std::fmt;
3use switchboard_common::SbError;
4
5#[derive(Debug)]
6pub enum ContainerError {
7 Message(String),
8 Io(std::io::Error),
9 Bollard(bollard::errors::Error),
10}
11
12impl From<bollard::errors::Error> for ContainerError {
13 fn from(val: bollard::errors::Error) -> Self {
14 ContainerError::Bollard(val)
15 }
16}
17impl From<std::io::Error> for ContainerError {
18 fn from(val: std::io::Error) -> Self {
19 ContainerError::Io(val)
20 }
21}
22
23impl fmt::Display for ContainerError {
24 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
25 match self {
26 ContainerError::Message(message) => write!(f, "Error: {}", message),
27 ContainerError::Io(err) => write!(f, "IO Error: {}", err),
28 ContainerError::Bollard(err) => write!(f, "Bollard Error: {}", err),
29 }
31 }
32}
33
34impl Error for ContainerError {
35 fn source(&self) -> Option<&(dyn Error + 'static)> {
36 match self {
37 ContainerError::Message(_message) => None,
38 ContainerError::Io(err) => Some(err),
39 ContainerError::Bollard(err) => Some(err),
40 }
41 }
42}
43
44impl From<ContainerError> for SbError {
45 fn from(val: ContainerError) -> Self {
46 match val {
48 ContainerError::Message(message) => SbError::CustomMessage(message),
49 ContainerError::Io(err) => SbError::CustomError {
50 message: "IO Error".to_string(),
51 source: std::sync::Arc::new(err),
52 },
53 ContainerError::Bollard(err) => SbError::CustomError {
54 message: "Bollard Error".to_string(),
55 source: std::sync::Arc::new(err),
56 },
57 }
58 }
59}
60
61pub fn handle_bollard_error(err: bollard::errors::Error) -> SbError {
62 SbError::ContainerError(std::sync::Arc::new(ContainerError::Bollard(err)))
63}
64
65pub type ContainerResult<T> = miette::Result<T, SbError>;