radicle_protocol/worker/fetch/
error.rs1use std::io;
2
3use thiserror::Error;
4
5use radicle::{cob, identity, storage};
6use radicle_fetch as fetch;
7
8#[derive(Debug, Error)]
9pub enum Fetch {
10 #[error(transparent)]
11 Run(#[from] fetch::Error),
12 #[error(transparent)]
13 Git(#[from] radicle::git::raw::Error),
14 #[error(transparent)]
15 Storage(#[from] storage::Error),
16 #[error(transparent)]
17 StorageCopy(#[from] io::Error),
18 #[error(transparent)]
19 Repository(#[from] radicle::storage::RepositoryError),
20 #[error(transparent)]
21 RefsDb(Box<radicle::node::refs::Error>),
22 #[error(
23 "validation of the storage repository failed: the delegates {delegates:?} failed to validate to meet a threshold of {threshold}"
24 )]
25 Validation {
26 threshold: usize,
27 delegates: Vec<String>,
28 },
29 #[error(transparent)]
30 Cache(#[from] Cache),
31}
32
33impl From<radicle::node::refs::Error> for Fetch {
34 fn from(err: radicle::node::refs::Error) -> Self {
35 Self::RefsDb(Box::new(err))
36 }
37}
38
39#[derive(Debug, Error)]
40pub enum Cache {
41 #[error(transparent)]
42 Parse(#[from] cob::ParseIdentifierError),
43 #[error(transparent)]
44 Repository(#[from] storage::RepositoryError),
45 #[error("failed to remove {type_name} '{id}' from cache: {err}")]
46 Remove {
47 id: cob::ObjectId,
48 type_name: cob::TypeName,
49 #[source]
50 err: Box<dyn std::error::Error + Send + Sync + 'static>,
51 },
52 #[error(transparent)]
53 Store(#[from] cob::store::Error),
54 #[error("failed to update {type_name} '{id}' in cache: {err}")]
55 Update {
56 id: cob::ObjectId,
57 type_name: cob::TypeName,
58 #[source]
59 err: Box<dyn std::error::Error + Send + Sync + 'static>,
60 },
61}
62
63#[derive(Debug, Error)]
64pub enum Handle {
65 #[error(transparent)]
66 Doc(#[from] identity::DocError),
67 #[error(transparent)]
68 Io(#[from] io::Error),
69 #[error(transparent)]
70 Init(#[from] fetch::handle::error::Init),
71 #[error(transparent)]
72 Storage(#[from] storage::Error),
73 #[error(transparent)]
74 Repository(#[from] radicle::storage::RepositoryError),
75}
76
77#[derive(Debug, Error)]
78pub enum Canonical {
79 #[error(transparent)]
80 Identity(#[from] radicle::storage::RepositoryError),
81 #[error(transparent)]
82 CanonicalRefs(#[from] radicle::identity::doc::CanonicalRefsError),
83}