use cabin_core::StandardFlagConflict;
use camino::Utf8PathBuf;
use cabin_driver::{BuildAction, Dialect};
use crate::standard_compat::StandardCompatViolation;
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct BuildGraph {
pub actions: Vec<BuildAction>,
pub dialect: Dialect,
pub default_outputs: Vec<Utf8PathBuf>,
pub compile_commands: Vec<CompileCommand>,
pub standard_violations: Vec<StandardViolation>,
pub standard_compat_violations: Vec<StandardCompatViolation>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum StandardViolation {
MsvcSpelling {
target: String,
language: &'static str,
standard: &'static str,
object: Utf8PathBuf,
},
MsvcGnuExtensions {
target: String,
object: Utf8PathBuf,
},
FlagConflict {
conflict: StandardFlagConflict,
object: Utf8PathBuf,
},
InterfaceIncompatibility {
consumer: String,
dependency: String,
language: &'static str,
consumer_standard: &'static str,
required: &'static str,
requirement_source: &'static str,
object: Utf8PathBuf,
},
}
impl StandardViolation {
#[must_use]
pub fn object(&self) -> &Utf8PathBuf {
match self {
Self::MsvcSpelling { object, .. }
| Self::MsvcGnuExtensions { object, .. }
| Self::FlagConflict { object, .. }
| Self::InterfaceIncompatibility { object, .. } => object,
}
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct CompileCommand {
pub directory: Utf8PathBuf,
pub file: Utf8PathBuf,
pub arguments: Vec<String>,
pub output: Utf8PathBuf,
}