1use derive_more::From;
2use orion_error::conversion::ToStructError;
3use orion_error::{OrionError, StructError, UnifiedReason};
4
5#[derive(Debug, Clone, PartialEq, From, OrionError)]
6pub enum UpdateReason {
7 #[orion_error(identity = "conf.update_invalid_request")]
8 InvalidRequest,
9 #[orion_error(identity = "sys.update_install_failed")]
10 InstallFailed,
11 #[orion_error(identity = "sys.update_remote_fetch_failed")]
12 RemoteFetchFailed,
13 #[orion_error(identity = "sys.update_integrity_check_failed")]
14 IntegrityCheckFailed,
15 #[orion_error(identity = "logic.update_state_conflict")]
16 StateConflict,
17 #[orion_error(transparent)]
18 Uvs(UnifiedReason),
19}
20
21pub type UpdateError = StructError<UpdateReason>;
22pub type UpdateResult<T> = Result<T, UpdateError>;
23
24pub(crate) fn invalid_request(detail: impl Into<String>) -> UpdateError {
25 UpdateReason::InvalidRequest.to_err().with_detail(detail)
26}
27
28pub(crate) fn install_failed(detail: impl Into<String>) -> UpdateError {
29 UpdateReason::InstallFailed.to_err().with_detail(detail)
30}
31
32pub(crate) fn remote_fetch_failed(detail: impl Into<String>) -> UpdateError {
33 UpdateReason::RemoteFetchFailed.to_err().with_detail(detail)
34}
35
36pub(crate) fn integrity_check_failed(detail: impl Into<String>) -> UpdateError {
37 UpdateReason::IntegrityCheckFailed
38 .to_err()
39 .with_detail(detail)
40}
41
42pub(crate) fn state_conflict(detail: impl Into<String>) -> UpdateError {
43 UpdateReason::StateConflict.to_err().with_detail(detail)
44}