use bp3d_util::simple_error;
use std::fmt::{Display, Formatter};
use std::str::Utf8Error;
#[derive(Debug, Clone, Eq, PartialEq)]
pub struct IncompatibleRustc {
pub expected: &'static str,
pub actual: String,
}
impl Display for IncompatibleRustc {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
write!(
f,
"expected version {}, got version {}",
self.expected, self.actual
)
}
}
#[derive(Debug, Clone, Eq, PartialEq)]
pub struct IncompatibleDependency {
pub name: String,
pub actual_version: String,
pub expected_version: String,
}
impl Display for IncompatibleDependency {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
write!(
f,
"expected version {}, got version {} for dependency '{}'",
self.expected_version, self.actual_version, self.name
)
}
}
simple_error! {
pub Error {
NotFound(String) => "module not found ({})",
Null => "unexpected null character in string",
MissingDepsForRust => "missing DEPS metadata key for a Rust module",
MissingFeaturesForRust => "missing FEATURES metadata key for a Rust module",
MissingVersionForRust => "missing RUSTC metadata key for a Rust module",
MissingModuleName => "missing NAME metadata key",
MissingModuleVersion => "missing VERSION metadata key",
MissingModuleInitForRust => "missing module init function for a Rust module",
InvalidUtf8(Utf8Error) => "invalid utf8: {}",
RustcVersionMismatch(IncompatibleRustc) => "incompatible rustc version: {}",
InvalidDepFormat => "invalid dependency format",
IncompatibleDep(IncompatibleDependency) => "incompatible dependency: {}",
IncompatibleFeatureSet(String) => "incompatible feature-set for dependency: {}",
Io(std::io::Error) => "io error: {}",
MissingMetadata => "missing module metadata",
InvalidMetadata => "invalid module metadata format"
}
}