oxide_mirror/error.rs
1//! Error type for `oxide-mirror`.
2
3use thiserror::Error;
4
5/// All errors produced by the mirror.
6#[derive(Debug, Error)]
7pub enum MirrorError {
8 /// Underlying SQLite / sqlx error.
9 #[error("sqlite error: {0}")]
10 Sql(#[from] sqlx::Error),
11
12 /// JSON (de)serialization failed.
13 #[error("json error: {0}")]
14 Json(#[from] serde_json::Error),
15
16 /// The `query` API rejected the supplied SQL because it is not a
17 /// read-only `SELECT` / `WITH` / `PRAGMA` statement.
18 #[error("read-only query rejected: {0}")]
19 QueryNotReadOnly(String),
20
21 /// A source returned a delta for a resource that has not been
22 /// pre-registered with the store.
23 #[error("unknown resource `{resource}` (register it via `MirrorStore::register_resource`)")]
24 UnknownResource {
25 /// Resource name that was not registered.
26 resource: String,
27 },
28
29 /// A source was requested by id but is not registered with the
30 /// [`Syncer`](crate::sync::Syncer).
31 #[error("unknown source `{0}`")]
32 UnknownSource(String),
33
34 /// Wrapped `oxide-k` kernel error (bus / registry).
35 #[error("kernel error: {0}")]
36 Kernel(#[from] oxide_k::KernelError),
37
38 /// Anything else.
39 #[error(transparent)]
40 Other(#[from] anyhow::Error),
41}
42
43/// Convenience alias.
44pub type Result<T> = std::result::Result<T, MirrorError>;