use thiserror::Error;
#[derive(Debug, Error)]
pub enum Error {
#[error("IO error: {0}")]
Io(#[from] std::io::Error),
#[error("TOML parse error: {0}")]
Toml(#[from] toml_edit::TomlError),
#[error("TOML serialize error: {0}")]
TomlSer(#[from] toml_edit::ser::Error),
#[error("JSON error: {0}")]
Json(#[from] serde_json::Error),
#[error("Semver error: {0}")]
Semver(#[from] semver::Error),
#[error("Walkdir error: {0}")]
Walkdir(#[from] walkdir::Error),
#[error("Ignore error: {0}")]
Ignore(#[from] ignore::Error),
#[error("Template parse error: {0}")]
TemplateParse(String),
#[error("Manifest error: {0}")]
Manifest(String),
#[error("команда `{program}` завершилась с кодом {code}: {stderr}")]
CommandFailed {
program: String,
code: i32,
stderr: String,
},
#[error("команда `{0}` не найдена (установлен ли инструмент?)")]
CommandNotFound(String),
#[error("компонент `{0}` не найден")]
ComponentNotFound(String),
#[error("`{0}` не является компонентом Light: имя должно начинаться с `light-fw-`")]
NotComponent(String),
#[error("компонент `{component}` несовместим: {reason}")]
Incompatible { component: String, reason: String },
#[error("компонент `{0}` не установлен")]
NotInstalled(String),
#[error("конфликт компонентов: {0}")]
Conflict(String),
#[error("от компонента `{0}` зависят другие компоненты — удалите их вместе")]
InUse(String),
#[error("операция отменена")]
Aborted,
#[error(
"компонент `{0}` не найден в vendor/, установите его без `--offline` на машине с сетью"
)]
Offline(String),
#[error("ошибка light.lock: {0}")]
Lockfile(String),
#[error("ошибка резервной копии: {0}")]
Backup(String),
#[error("ошибка публикации: {0}")]
Publish(String),
#[error("ошибка init: {0}")]
Init(String),
#[error(
"crate {name} v{version} already published; bump version in Cargo.toml before publishing"
)]
AlreadyPublished { name: String, version: String },
#[cfg(feature = "network")]
#[error("сетевой запрос не удался: {0}")]
Http(#[from] reqwest::Error),
}
pub type Result<T> = std::result::Result<T, Error>;