olai_stack_state/
error.rs1#[derive(Debug, thiserror::Error)]
5pub enum Error {
6 #[error("state store: {0}")]
8 Sqlite(#[from] rusqlite::Error),
9 #[error(
11 "state store schema version {found} is newer than this version supports ({supported}); \
12 upgrade trestle"
13 )]
14 UnsupportedVersion {
15 found: u32,
17 supported: u32,
19 },
20 #[error(
22 "`{0}` is not a valid name: use lowercase letters, digits and dashes, starting with a letter"
23 )]
24 InvalidName(String),
25 #[error("{kind} `{name}` already exists")]
27 Duplicate {
28 kind: &'static str,
30 name: String,
32 },
33 #[error("no {kind} `{id}`")]
35 NotFound {
36 kind: &'static str,
38 id: String,
40 },
41 #[error("no free slot: the host runs at most {} instances", olai_stack_topology::MAX_SLOT + 1)]
43 SlotsExhausted,
44 #[error(transparent)]
46 Manifest(#[from] olai_stack_topology::ManifestError),
47 #[error(transparent)]
49 Workspace(#[from] olai_stack_topology::WorkspaceError),
50 #[error("state store JSON: {0}")]
52 Json(#[from] serde_json::Error),
53 #[error("{path}: {source}")]
55 Io {
56 path: std::path::PathBuf,
58 #[source]
60 source: std::io::Error,
61 },
62 #[error("can't export: {0}")]
64 Export(String),
65}
66
67impl Error {
68 pub(crate) fn io(path: impl Into<std::path::PathBuf>, source: std::io::Error) -> Self {
69 Error::Io {
70 path: path.into(),
71 source,
72 }
73 }
74}
75
76pub type Result<T, E = Error> = std::result::Result<T, E>;