Skip to main content

light_fw_cli_core/
error.rs

1use thiserror::Error;
2
3#[derive(Debug, Error)]
4pub enum Error {
5    #[error("IO error: {0}")]
6    Io(#[from] std::io::Error),
7
8    #[error("TOML parse error: {0}")]
9    Toml(#[from] toml_edit::TomlError),
10
11    #[error("TOML serialize error: {0}")]
12    TomlSer(#[from] toml_edit::ser::Error),
13
14    #[error("JSON error: {0}")]
15    Json(#[from] serde_json::Error),
16
17    #[error("Semver error: {0}")]
18    Semver(#[from] semver::Error),
19
20    #[error("Walkdir error: {0}")]
21    Walkdir(#[from] walkdir::Error),
22
23    #[error("Ignore error: {0}")]
24    Ignore(#[from] ignore::Error),
25
26    #[error("Template parse error: {0}")]
27    TemplateParse(String),
28
29    #[error("Manifest error: {0}")]
30    Manifest(String),
31
32    /// Внешний процесс завершился с ненулевым кодом.
33    #[error("команда `{program}` завершилась с кодом {code}: {stderr}")]
34    CommandFailed {
35        program: String,
36        code: i32,
37        stderr: String,
38    },
39
40    /// Исполняемый файл не найден в `PATH`.
41    #[error("команда `{0}` не найдена (установлен ли инструмент?)")]
42    CommandNotFound(String),
43
44    /// Компонент не найден ни в workspace, ни в vendor, ни в реестре.
45    #[error("компонент `{0}` не найден")]
46    ComponentNotFound(String),
47
48    /// Имя не относится к компонентам Light (не `light-fw-*`).
49    #[error("`{0}` не является компонентом Light: имя должно начинаться с `light-fw-`")]
50    NotComponent(String),
51
52    /// Компонент несовместим с текущим ядром проекта или другими компонентами.
53    #[error("компонент `{component}` несовместим: {reason}")]
54    Incompatible { component: String, reason: String },
55
56    /// Компонент не подключён к проекту.
57    #[error("компонент `{0}` не установлен")]
58    NotInstalled(String),
59
60    /// Конфликт между компонентами (`conflicts`).
61    #[error("конфликт компонентов: {0}")]
62    Conflict(String),
63
64    /// От него зависят другие компоненты.
65    #[error("от компонента `{0}` зависят другие компоненты — удалите их вместе")]
66    InUse(String),
67
68    /// Операция отменена пользователем.
69    #[error("операция отменена")]
70    Aborted,
71
72    /// Требуется сеть, но включён `--offline`.
73    #[error(
74        "компонент `{0}` не найден в vendor/, установите его без `--offline` на машине с сетью"
75    )]
76    Offline(String),
77
78    /// Ошибка работы с `light.lock`.
79    #[error("ошибка light.lock: {0}")]
80    Lockfile(String),
81
82    /// Ошибка резервного копирования/восстановления.
83    #[error("ошибка резервной копии: {0}")]
84    Backup(String),
85
86    /// Ошибка публикации: граф зависимостей, версии, pre-flight.
87    #[error("ошибка публикации: {0}")]
88    Publish(String),
89
90    /// Ошибка создания проекта (`light init`).
91    #[error("ошибка init: {0}")]
92    Init(String),
93
94    /// Версия крейта уже опубликована на crates.io.
95    #[error(
96        "crate {name} v{version} already published; bump version in Cargo.toml before publishing"
97    )]
98    AlreadyPublished { name: String, version: String },
99
100    /// Сетевой запрос к crates.io завершился ошибкой.
101    #[cfg(feature = "network")]
102    #[error("сетевой запрос не удался: {0}")]
103    Http(#[from] reqwest::Error),
104}
105
106pub type Result<T> = std::result::Result<T, Error>;