use std::collections::BTreeMap;
use serde::Deserialize;
#[derive(Debug, Clone, Default, Deserialize)]
pub struct CargoMetadata {
#[serde(default)]
pub packages: Vec<CargoPackage>,
#[serde(default)]
pub workspace_default_members: Vec<String>,
#[serde(default)]
pub workspace_members: Vec<String>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct CargoPackage {
pub name: String,
pub id: String,
#[serde(default)]
pub features: BTreeMap<String, Vec<String>>,
#[serde(default)]
pub dependencies: Vec<CargoDependency>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct CargoDependency {
pub name: String,
#[serde(default)]
pub kind: Option<String>,
#[serde(default)]
pub features: Vec<String>,
#[serde(default = "default_uses_default_features")]
pub uses_default_features: bool,
#[serde(default)]
pub optional: bool,
#[serde(default)]
pub rename: Option<String>,
}
impl CargoDependency {
pub fn local_name(&self) -> &str {
self.rename.as_deref().unwrap_or(&self.name)
}
}
fn default_uses_default_features() -> bool {
true
}