Skip to main content

klukai_agent/agent/
error.rs

1use 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}