use serde::{Deserialize, Serialize};
use thiserror::Error;
#[derive(Error, Debug, Clone, Serialize, Deserialize)]
pub enum BuildError {
#[error("Invalid format in {field}: {message}")]
InvalidFormat {
field: String,
message: String,
},
#[error("Missing required field: {field}")]
MissingRequired {
field: String,
},
#[error("Invalid reference: {reference}")]
InvalidReference {
reference: String,
},
#[error("Validation failed: {}", errors.join(", "))]
ValidationFailed {
errors: Vec<String>,
},
#[error("IO error: {0}")]
Io(String),
#[error("Serialization error: {0}")]
Serialization(String),
#[error("XML generation error: {0}")]
XmlGeneration(String),
#[error("Determinism verification failed: {message}")]
DeterminismFailed {
message: String,
},
#[error("Determinism guarantee violated: {guarantee} - {details}")]
DeterminismGuaranteeViolated {
guarantee: String,
details: String,
},
#[error("Validation error: {0}")]
Validation(String),
#[error("Parallel processing error: {0}")]
Parallel(String),
#[error("Security violation: {0}")]
Security(String),
#[error("Input sanitization failed: {0}")]
InputSanitization(String),
#[error("{0}")]
Other(String),
}
impl From<std::io::Error> for BuildError {
fn from(err: std::io::Error) -> Self {
BuildError::Io(err.to_string())
}
}
impl From<serde_json::Error> for BuildError {
fn from(err: serde_json::Error) -> Self {
BuildError::Serialization(err.to_string())
}
}
impl From<quick_xml::Error> for BuildError {
fn from(err: quick_xml::Error) -> Self {
BuildError::XmlGeneration(err.to_string())
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BuildWarning {
pub code: String,
pub message: String,
pub location: Option<String>,
}