klukai_agent/agent/
error.rs1use crate::{api::peer::SyncError, transport::TransportError};
2use hyper::StatusCode;
3use klukai_types::{
4 agent::ChangeError,
5 sqlite::SqlitePoolError,
6 sync::{SyncMessageDecodeError, SyncMessageEncodeError},
7};
8use tokio::time::error::Elapsed;
9
10#[derive(Debug, thiserror::Error)]
11pub enum SyncClientError {
12 #[error("bad status code: {0}")]
13 Status(StatusCode),
14 #[error("service unavailable right now")]
15 Unavailable,
16 #[error(transparent)]
17 Connect(#[from] TransportError),
18 #[error("request timed out")]
19 RequestTimedOut,
20 #[error(transparent)]
21 Io(#[from] std::io::Error),
22 #[error(transparent)]
23 Pool(#[from] SqlitePoolError),
24 #[error("could not decode message: {0}")]
25 Decoded(#[from] SyncMessageDecodeError),
26 #[error("could not encode message: {0}")]
27 Encoded(#[from] SyncMessageEncodeError),
28
29 #[error(transparent)]
30 Sync(#[from] SyncError),
31}
32
33impl SyncClientError {
34 pub fn is_unavailable(&self) -> bool {
35 matches!(self, SyncClientError::Unavailable)
36 }
37}
38
39#[derive(Debug, thiserror::Error)]
40pub enum SyncRecvError {
41 #[error("could not decode message: {0}")]
42 Decoded(#[from] SyncMessageDecodeError),
43 #[error(transparent)]
44 Change(#[from] ChangeError),
45 #[error(transparent)]
46 Io(#[from] std::io::Error),
47 #[error("expected sync state message, received something else")]
48 ExpectedSyncState,
49 #[error("unexpected end of stream")]
50 UnexpectedEndOfStream,
51 #[error("expected sync clock message, received something else")]
52 ExpectedClockMessage,
53 #[error("timed out waiting for sync message")]
54 TimedOut(#[from] Elapsed),
55 #[error("changes channel is closed")]
56 ChangesChannelClosed,
57 #[error("requests channel is closed")]
58 RequestsChannelClosed,
59}