radicle_cob/object/collaboration/
error.rs

1// Copyright © 2022 The Radicle Link Contributors
2
3use thiserror::Error;
4
5use crate::git;
6
7#[derive(Debug, Error)]
8pub enum Create {
9    #[error(transparent)]
10    Evaluate(Box<dyn std::error::Error + Send + Sync + 'static>),
11    #[error(transparent)]
12    CreateChange(#[from] git::change::error::Create),
13    #[error("failed to updated references for during object creation: {err}")]
14    Refs {
15        #[source]
16        err: Box<dyn std::error::Error + Send + Sync + 'static>,
17    },
18    #[error(transparent)]
19    Io(#[from] std::io::Error),
20    #[error("signer must belong to the author")]
21    SignerIsNotAuthor,
22}
23
24impl Create {
25    pub(crate) fn evaluate(err: impl std::error::Error + Send + Sync + 'static) -> Self {
26        Self::Evaluate(Box::new(err))
27    }
28}
29
30#[derive(Debug, Error)]
31#[error("failed to remove object: {err}")]
32pub struct Remove {
33    #[source]
34    pub(crate) err: Box<dyn std::error::Error + Send + Sync + 'static>,
35}
36
37#[derive(Debug, Error)]
38pub enum Retrieve {
39    #[error(transparent)]
40    Evaluate(Box<dyn std::error::Error + Send + Sync + 'static>),
41    #[error(transparent)]
42    Git(#[from] git2::Error),
43    #[error("failed to get references during object retrieval: {err}")]
44    Refs {
45        #[source]
46        err: Box<dyn std::error::Error + Send + Sync + 'static>,
47    },
48    #[error(transparent)]
49    Io(#[from] std::io::Error),
50}
51
52impl Retrieve {
53    pub(crate) fn evaluate(err: impl std::error::Error + Send + Sync + 'static) -> Self {
54        Self::Evaluate(Box::new(err))
55    }
56}
57
58#[derive(Debug, Error)]
59pub enum Update {
60    #[error(transparent)]
61    Evaluate(Box<dyn std::error::Error + Send + Sync + 'static>),
62    #[error("no object found")]
63    NoSuchObject,
64    #[error(transparent)]
65    CreateChange(#[from] git::change::error::Create),
66    #[error("failed to get references during object update: {err}")]
67    Refs {
68        #[source]
69        err: Box<dyn std::error::Error + Send + Sync + 'static>,
70    },
71    #[error(transparent)]
72    Git(#[from] git2::Error),
73    #[error(transparent)]
74    Io(#[from] std::io::Error),
75    #[error("signer must belong to the author")]
76    SignerIsNotAuthor,
77}
78
79impl Update {
80    pub(crate) fn evaluate(err: impl std::error::Error + Send + Sync + 'static) -> Self {
81        Self::Evaluate(Box::new(err))
82    }
83}