use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Default)]
pub struct Dependency {
#[serde(rename = "groupId")]
pub group_id: String,
#[serde(rename = "artifactId")]
pub artifact_id: String,
pub version: Option<String>,
#[serde(rename = "type")]
pub type_: Option<String>,
pub classifier: Option<String>,
pub scope: Option<String>,
pub optional: Option<bool>,
#[serde(rename = "exclusions")]
pub exclusions: Option<Vec<Exclusion>>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct Exclusion {
#[serde(rename = "groupId")]
pub group_id: String,
#[serde(rename = "artifactId")]
pub artifact_id: String,
}
impl Dependency {
pub fn coordinates(&self) -> (&str, &str, Option<&str>) {
(&self.group_id, &self.artifact_id, self.version.as_deref())
}
pub fn id(&self) -> String {
format!("{}:{}", self.group_id, self.artifact_id)
}
pub fn full_id(&self) -> String {
if let Some(version) = &self.version {
format!("{}:{}:{}", self.group_id, self.artifact_id, version)
} else {
format!("{}:{}", self.group_id, self.artifact_id)
}
}
pub fn is_test_scope(&self) -> bool {
self.scope.as_deref() == Some("test")
}
pub fn is_compile_scope(&self) -> bool {
self.scope.as_deref().unwrap_or("compile") == "compile"
}
}