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 CacheFrameTooLarge {
18 key_len: usize,
19 value_len: usize,
20 max_payload: usize,
21 },
22
23 EventFrameTooLarge {
25 topic_len: usize,
26 payload_len: usize,
27 max_payload: usize,
28 },
29
30 ContestFrameTooLarge {
32 subject_len: usize,
33 owner_len: usize,
34 max_payload: usize,
35 },
36
37 Io(std::io::Error),
39}
40
41impl fmt::Display for Error {
42 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
43 match self {
44 Self::AlreadyJoined { name } => {
45 write!(f, "fleet '{name}' has already been joined in this process")
46 }
47 Self::EmptyFleet => {
48 write!(f, "fleet_size must be ≥ 1; Orbit needs at least one member")
49 }
50 Self::CacheFrameTooLarge {
51 key_len,
52 value_len,
53 max_payload,
54 } => {
55 write!(
56 f,
57 "orbit cache frame too large: key_len={key_len} value_len={value_len} max_payload={max_payload}"
58 )
59 }
60 Self::EventFrameTooLarge {
61 topic_len,
62 payload_len,
63 max_payload,
64 } => {
65 write!(
66 f,
67 "orbit event frame too large: topic_len={topic_len} payload_len={payload_len} max_payload={max_payload}"
68 )
69 }
70 Self::ContestFrameTooLarge {
71 subject_len,
72 owner_len,
73 max_payload,
74 } => {
75 write!(
76 f,
77 "orbit contest frame too large: subject_len={subject_len} owner_len={owner_len} max_payload={max_payload}"
78 )
79 }
80 Self::Io(err) => write!(f, "orbit io error: {err}"),
81 }
82 }
83}
84
85impl std::error::Error for Error {
86 fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
87 match self {
88 Self::Io(err) => Some(err),
89 _ => None,
90 }
91 }
92}