use std::collections::HashSet;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct DependentPackage {
pub purl: String,
pub requirement: String,
#[serde(default)]
pub scope: String,
pub is_runtime: bool,
pub is_optional: bool,
pub is_resolved: bool,
#[serde(default)]
pub reachable: Reachability,
#[serde(default)]
pub relation: HashSet<Relation>,
#[serde(default)]
pub parents: HashSet<String>,
}
impl Default for DependentPackage {
fn default() -> Self {
Self {
purl: String::new(),
requirement: String::new(),
scope: String::new(),
is_runtime: true,
is_optional: false,
is_resolved: false,
reachable: Default::default(),
relation: HashSet::new(),
parents: HashSet::new(),
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Deserialize, Serialize)]
#[serde(rename_all = "lowercase")]
pub enum Relation {
Direct,
Indirect,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Deserialize, Serialize, Default)]
#[serde(rename_all = "lowercase")]
pub enum Reachability {
Yes,
#[default]
Possible,
No,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct Maintainer {
pub name: Option<String>,
pub email: Option<String>,
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct Party {
#[serde(rename = "type")]
pub typ: String,
pub role: String,
pub name: String,
pub email: String,
pub url: String,
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct Package {
pub namespace: String,
pub name: String,
pub version: String,
pub primary_language: String,
pub license_expression: String,
pub declared_license: String,
pub dependencies: Vec<DependentPackage>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct LockMavenParam {
pub group_id: String,
pub artifact_id: String,
pub version: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub scope: Option<String>,
#[serde(default)]
pub is_optional: bool,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct SupportedType {
pub name: String,
pub filenames: Vec<String>,
pub patterns: Vec<String>,
}