provenant/output_schema/
dependency.rs1use serde::{Deserialize, Serialize};
2use std::collections::HashMap;
3
4use super::resolved_package::OutputResolvedPackage;
5use super::serde_helpers::serialize_optional_map_as_object;
6
7#[derive(Serialize, Deserialize, Debug, Clone)]
8pub struct OutputDependency {
9 pub purl: Option<String>,
10 pub extracted_requirement: Option<String>,
11 pub scope: Option<String>,
12 pub is_runtime: Option<bool>,
13 pub is_optional: Option<bool>,
14 pub is_pinned: Option<bool>,
15 pub is_direct: Option<bool>,
16 pub resolved_package: Option<Box<OutputResolvedPackage>>,
17 #[serde(default, serialize_with = "serialize_optional_map_as_object")]
18 pub extra_data: Option<HashMap<String, serde_json::Value>>,
19}
20
21impl From<&crate::models::Dependency> for OutputDependency {
22 fn from(value: &crate::models::Dependency) -> Self {
23 Self {
24 purl: value.purl.clone(),
25 extracted_requirement: value.extracted_requirement.clone(),
26 scope: value.scope.clone(),
27 is_runtime: value.is_runtime,
28 is_optional: value.is_optional,
29 is_pinned: value.is_pinned,
30 is_direct: value.is_direct,
31 resolved_package: value
32 .resolved_package
33 .as_ref()
34 .map(|rp| Box::new(OutputResolvedPackage::from(rp.as_ref()))),
35 extra_data: value.extra_data.clone(),
36 }
37 }
38}
39
40impl TryFrom<&OutputDependency> for crate::models::Dependency {
41 type Error = String;
42 fn try_from(value: &OutputDependency) -> Result<Self, Self::Error> {
43 let resolved_package = value
44 .resolved_package
45 .as_ref()
46 .map(|rp| crate::models::ResolvedPackage::try_from(rp.as_ref()).map(Box::new))
47 .transpose()?;
48 Ok(Self {
49 purl: value.purl.clone(),
50 extracted_requirement: value.extracted_requirement.clone(),
51 scope: value.scope.clone(),
52 is_runtime: value.is_runtime,
53 is_optional: value.is_optional,
54 is_pinned: value.is_pinned,
55 is_direct: value.is_direct,
56 resolved_package,
57 extra_data: value.extra_data.clone(),
58 })
59 }
60}