Skip to main content

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>;