use serde::{Deserialize, Serialize};
use thiserror::Error;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CompileWarning {
pub code: String,
pub message: String,
pub location: Option<String>,
}
#[derive(Debug, Error)]
pub enum CompileError {
#[error(transparent)]
Parse(#[from] crate::spec_parser::ParseError),
#[error("E1010: routing conflict: {0}")]
RoutingConflict(String),
#[error("E1020: operation has no x-barbacane-dispatch: {0}")]
MissingDispatch(String),
#[error("E1031: plaintext HTTP upstream URL not allowed in production: {0}")]
PlaintextUpstream(String),
#[error("E1040: plugin '{0}' used in spec but not declared in barbacane.yaml")]
UndeclaredPlugin(String),
#[error("E1011: middleware missing 'name': {0}")]
MissingMiddlewareName(String),
#[error("E1050: ambiguous route: {0}")]
AmbiguousRoute(String),
#[error("E1051: schema too deep: {0}")]
SchemaTooDeep(String),
#[error("E1052: schema too complex: {0}")]
SchemaTooComplex(String),
#[error("E1054: invalid path template: {0}")]
InvalidPathTemplate(String),
#[error("E1055: duplicate operationId '{0}': {1}")]
DuplicateOperationId(String, String),
#[error("manifest error: {0}")]
ManifestError(String),
#[error("plugin resolution error: {0}")]
PluginResolution(String),
#[error("I/O error: {0}")]
Io(#[from] std::io::Error),
#[error("JSON error: {0}")]
Json(#[from] serde_json::Error),
}