1use std::sync::Arc;
4
5pub type Result<T> = std::result::Result<T, Error>;
7
8pub type ArcResult<T> = std::result::Result<T, Arc<Error>>;
13
14#[derive(thiserror::Error, Debug)]
16pub enum Error {
17 #[allow(missing_docs)]
18 #[error(transparent)]
19 Io(#[from] std::io::Error),
20 #[allow(missing_docs)]
21 #[error(transparent)]
22 Transport(#[from] tonic::transport::Error),
23 #[allow(missing_docs)]
24 #[error(transparent)]
25 TokioRusqlite(#[from] tokio_rusqlite::Error),
26 #[allow(missing_docs)]
27 #[error(transparent)]
28 Rusqlite(#[from] rusqlite::Error),
29 #[allow(missing_docs)]
30 #[error(transparent)]
31 Toml(#[from] toml::de::Error),
32 #[allow(missing_docs)]
33 #[error(transparent)]
34 Flexbuffers(#[from] flexbuffers::DeserializationError),
35 #[allow(missing_docs)]
36 #[error(transparent)]
37 Rpc(#[from] Box<tonic::Status>),
38 #[allow(missing_docs)]
39 #[error(transparent)]
40 Join(#[from] tokio::task::JoinError),
41 #[error("generator panicked")]
43 Panic,
44 #[error(transparent)]
46 Backoff(#[from] Box<backoff::Error<Error>>),
47 #[error("entry is currently being loaded")]
49 EntryLoading,
50 #[error("entry is currently unavailable")]
52 EntryUnavailable,
53 #[error("entry cannot be assigned")]
55 EntryUnassignable,
56}
57
58pub enum TryInnerError<'a, E> {
60 CacheError(Arc<Error>),
62 GeneratorError(&'a E),
64}
65
66impl<E> From<Arc<Error>> for TryInnerError<'_, E> {
67 fn from(value: Arc<Error>) -> Self {
68 Self::CacheError(value)
69 }
70}
71
72impl<'a, E> From<&'a E> for TryInnerError<'a, E> {
73 fn from(value: &'a E) -> Self {
74 Self::GeneratorError(value)
75 }
76}