use alpm_pkgbuild::bridge::Keyword;
use alpm_types::{Name, SystemArchitecture};
use fluent_i18n::t;
use thiserror::Error;
use winnow::error::{ContextError, ParseError};
#[cfg(doc)]
use crate::SourceInfo;
#[derive(Debug, Error)]
pub enum BridgeError {
#[error(transparent)]
AlpmType(#[from] alpm_types::Error),
#[error("{msg}", msg = t!("error-bridge-no-name"))]
NoName,
#[error("{msg}", msg = t!("error-bridge-invalid-package-name", {
"name" => name,
"error" => error.to_string()
}))]
InvalidPackageName {
name: String,
error: alpm_types::Error,
},
#[error("{msg}", msg = t!("error-bridge-undeclared-package", { "name" => .0 }))]
UndeclaredPackageName(String),
#[error("{msg}", msg = t!("error-bridge-unused-package-function", { "name" => .0.to_string() }))]
UnusedPackageFunction(Name),
#[error("{msg}", msg = t!("error-bridge-missing-required-keyword", { "keyword" => keyword.to_string() }))]
MissingRequiredKeyword {
keyword: Keyword,
},
#[error("{msg}", msg = t!("error-bridge-parse-error", {
"keyword" => keyword.to_string(),
"error" => error
}))]
ParseError {
keyword: Keyword,
error: String,
},
#[error("{msg}", msg = t!("error-bridge-wrong-variable-type", {
"keyword" => keyword,
"expected" => expected,
"actual" => actual
}))]
WrongVariableType {
keyword: String,
expected: String,
actual: String,
},
#[error("{msg}", msg = t!("error-bridge-unexpected-arch", {
"keyword" => keyword.to_string(),
"suffix" => suffix.to_string()
}))]
UnexpectedArchitecture {
keyword: Keyword,
suffix: SystemArchitecture,
},
#[error("{msg}", msg = t!("error-bridge-unclearable-value", { "keyword" => keyword.to_string() }))]
UnclearableValue {
keyword: Keyword,
},
#[error("{msg}", msg = t!("error-bridge-unexpected-array", {
"keyword" => keyword.to_string(),
"values" => values.iter().map(|s| format!("\"{s}\"")).collect::<Vec<_>>().join(", ")
}))]
UnexpectedArray {
keyword: Keyword,
values: Vec<String>,
},
}
impl<'a> From<(Keyword, ParseError<&'a str, ContextError>)> for BridgeError {
fn from(value: (Keyword, ParseError<&'a str, ContextError>)) -> Self {
Self::ParseError {
keyword: value.0,
error: value.1.to_string(),
}
}
}