use thiserror::Error;
#[derive(Debug, Error)]
pub enum InterchangeError {
#[error("XML error: {0}")]
Xml(String),
#[error("Archive error: {0}")]
Archive(String),
#[error("JSON error: {0}")]
Json(String),
#[error("IO error: {0}")]
Io(#[from] std::io::Error),
#[error("Unsupported XMI version: {0}")]
UnsupportedVersion(String),
#[error("Missing required {kind}: {name}")]
Missing { kind: &'static str, name: String },
#[error("Invalid {kind}: {message}")]
Invalid { kind: &'static str, message: String },
#[error("Unresolved reference: {0}")]
UnresolvedReference(String),
#[error("Unsupported: {0}")]
Unsupported(String),
#[error("Validation error: {0}")]
Validation(String),
}
impl InterchangeError {
pub fn xml(message: impl Into<String>) -> Self {
Self::Xml(message.into())
}
pub fn archive(message: impl Into<String>) -> Self {
Self::Archive(message.into())
}
pub fn json(message: impl Into<String>) -> Self {
Self::Json(message.into())
}
pub fn missing_element(name: impl Into<String>) -> Self {
Self::Missing {
kind: "element",
name: name.into(),
}
}
pub fn missing_attribute(name: impl Into<String>) -> Self {
Self::Missing {
kind: "attribute",
name: name.into(),
}
}
pub fn invalid_element(message: impl Into<String>) -> Self {
Self::Invalid {
kind: "element",
message: message.into(),
}
}
pub fn invalid_attribute(message: impl Into<String>) -> Self {
Self::Invalid {
kind: "attribute",
message: message.into(),
}
}
}