1use std::fmt;
5
6pub type Result<T, E = Error> = std::result::Result<T, E>;
7
8#[derive(Debug)]
9pub enum Error {
10 AlreadyJoined { name: &'static str },
12
13 EmptyFleet,
15
16 NodeOutsideFleet { node_id: u16, fleet_size: u8 },
18
19 Io(std::io::Error),
21}
22
23impl fmt::Display for Error {
24 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
25 match self {
26 Self::AlreadyJoined { name } => {
27 write!(f, "fleet '{name}' has already been joined in this process")
28 }
29 Self::EmptyFleet => {
30 write!(f, "fleet_size must be ≥ 1; Orbit needs at least one member")
31 }
32 Self::NodeOutsideFleet {
33 node_id,
34 fleet_size,
35 } => write!(f, "node_id {node_id} is outside fleet_size {fleet_size}"),
36 Self::Io(err) => write!(f, "orbit io error: {err}"),
37 }
38 }
39}
40
41impl std::error::Error for Error {
42 fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
43 match self {
44 Self::Io(err) => Some(err),
45 _ => None,
46 }
47 }
48}