1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
use mingling::{
Groupped,
macros::{chain, r_println, renderer},
res::ResExitCode,
};
use serde::Serialize;
use space_system::SpaceError;
use crate::{Next, error::ErrorIo, locale::errors::I18nSpaceError};
pub const EC_SPACE_NOT_FOUND: i32 = 2600;
pub const EC_SPACE_PATH_FORMAT: i32 = 2601;
pub const EC_SPACE_REQUIRE_EMPTY_DIR: i32 = 2602;
pub const EC_SPACE_CONFIG_ALREADY_EXIST: i32 = 2603;
#[derive(Serialize, Groupped)]
pub struct ErrorSpace {
pub error: SpaceError,
}
#[chain]
pub fn handle_error_space(err: ErrorSpace) -> Next {
match err.error {
// Forward to ErrorIo
SpaceError::Io(error) => ErrorIo::from(error).to_render(),
_ => err.to_render(),
}
}
#[renderer]
pub fn render_error_space(err: ErrorSpace, ec: &mut ResExitCode) {
match &err.error {
SpaceError::SpaceNotFound => {
r_println!("{}", I18nSpaceError::space_not_found().trim());
ec.exit_code = EC_SPACE_NOT_FOUND;
}
SpaceError::PathFormatError(_) => {
r_println!("{}", I18nSpaceError::path_format().trim());
ec.exit_code = EC_SPACE_PATH_FORMAT;
}
SpaceError::RequireEmptyDirectory => {
r_println!("{}", I18nSpaceError::require_empty_directory().trim());
ec.exit_code = EC_SPACE_REQUIRE_EMPTY_DIR;
}
SpaceError::ConfigFileAlreadyExist => {
r_println!("{}", I18nSpaceError::config_file_already_exist().trim());
ec.exit_code = EC_SPACE_CONFIG_ALREADY_EXIST;
}
SpaceError::Io(_) => {
// Forwarded to ErrorIo via handle_error_space chain
}
SpaceError::Other(_) => {
r_println!("{}", I18nSpaceError::space_not_found().trim());
ec.exit_code = EC_SPACE_NOT_FOUND;
}
}
}
impl From<SpaceError> for ErrorSpace {
fn from(error: SpaceError) -> Self {
Self { error }
}
}
|