1use serde::{Deserialize, Serialize};
2
3#[derive(Serialize, Deserialize, Debug, Clone)]
4pub struct OutputLicenseReference {
5 #[serde(default, skip_serializing_if = "Option::is_none")]
6 pub key: Option<String>,
7 #[serde(default, skip_serializing_if = "Option::is_none")]
8 pub language: Option<String>,
9 pub name: String,
10 pub short_name: String,
11 #[serde(default, skip_serializing_if = "Option::is_none")]
12 pub owner: Option<String>,
13 #[serde(default, skip_serializing_if = "Option::is_none")]
14 pub homepage_url: Option<String>,
15 pub spdx_license_key: String,
16 #[serde(default, skip_serializing_if = "Vec::is_empty")]
17 pub other_spdx_license_keys: Vec<String>,
18 #[serde(default, skip_serializing_if = "Option::is_none")]
19 pub osi_license_key: Option<String>,
20 #[serde(default, skip_serializing_if = "Vec::is_empty")]
21 pub text_urls: Vec<String>,
22 #[serde(default, skip_serializing_if = "Option::is_none")]
23 pub osi_url: Option<String>,
24 #[serde(default, skip_serializing_if = "Option::is_none")]
25 pub faq_url: Option<String>,
26 #[serde(default, skip_serializing_if = "Vec::is_empty")]
27 pub other_urls: Vec<String>,
28 #[serde(default, skip_serializing_if = "Option::is_none")]
29 pub category: Option<String>,
30 #[serde(default)]
31 pub is_exception: bool,
32 #[serde(default)]
33 pub is_unknown: bool,
34 #[serde(default)]
35 pub is_generic: bool,
36 #[serde(default, skip_serializing_if = "Option::is_none")]
37 pub notes: Option<String>,
38 #[serde(default, skip_serializing_if = "Option::is_none")]
39 pub minimum_coverage: Option<u8>,
40 #[serde(default, skip_serializing_if = "Option::is_none")]
41 pub standard_notice: Option<String>,
42 #[serde(default, skip_serializing_if = "Vec::is_empty")]
43 pub ignorable_copyrights: Vec<String>,
44 #[serde(default, skip_serializing_if = "Vec::is_empty")]
45 pub ignorable_holders: Vec<String>,
46 #[serde(default, skip_serializing_if = "Vec::is_empty")]
47 pub ignorable_authors: Vec<String>,
48 #[serde(default, skip_serializing_if = "Vec::is_empty")]
49 pub ignorable_urls: Vec<String>,
50 #[serde(default, skip_serializing_if = "Vec::is_empty")]
51 pub ignorable_emails: Vec<String>,
52 #[serde(default, skip_serializing_if = "Option::is_none")]
53 pub scancode_url: Option<String>,
54 #[serde(default, skip_serializing_if = "Option::is_none")]
55 pub licensedb_url: Option<String>,
56 #[serde(default, skip_serializing_if = "Option::is_none")]
57 pub spdx_url: Option<String>,
58 pub text: String,
59}
60
61impl From<&crate::models::LicenseReference> for OutputLicenseReference {
62 fn from(value: &crate::models::LicenseReference) -> Self {
63 Self {
64 key: value.key.clone(),
65 language: value.language.clone(),
66 name: value.name.clone(),
67 short_name: value.short_name.clone(),
68 owner: value.owner.clone(),
69 homepage_url: value.homepage_url.clone(),
70 spdx_license_key: value.spdx_license_key.clone(),
71 other_spdx_license_keys: value.other_spdx_license_keys.clone(),
72 osi_license_key: value.osi_license_key.clone(),
73 text_urls: value.text_urls.clone(),
74 osi_url: value.osi_url.clone(),
75 faq_url: value.faq_url.clone(),
76 other_urls: value.other_urls.clone(),
77 category: value.category.clone(),
78 is_exception: value.is_exception,
79 is_unknown: value.is_unknown,
80 is_generic: value.is_generic,
81 notes: value.notes.clone(),
82 minimum_coverage: value.minimum_coverage,
83 standard_notice: value.standard_notice.clone(),
84 ignorable_copyrights: value.ignorable_copyrights.clone(),
85 ignorable_holders: value.ignorable_holders.clone(),
86 ignorable_authors: value.ignorable_authors.clone(),
87 ignorable_urls: value.ignorable_urls.clone(),
88 ignorable_emails: value.ignorable_emails.clone(),
89 scancode_url: value.scancode_url.clone(),
90 licensedb_url: value.licensedb_url.clone(),
91 spdx_url: value.spdx_url.clone(),
92 text: value.text.clone(),
93 }
94 }
95}
96
97impl TryFrom<&OutputLicenseReference> for crate::models::LicenseReference {
98 type Error = String;
99 fn try_from(value: &OutputLicenseReference) -> Result<Self, Self::Error> {
100 Ok(Self {
101 key: value.key.clone(),
102 language: value.language.clone(),
103 name: value.name.clone(),
104 short_name: value.short_name.clone(),
105 owner: value.owner.clone(),
106 homepage_url: value.homepage_url.clone(),
107 spdx_license_key: value.spdx_license_key.clone(),
108 other_spdx_license_keys: value.other_spdx_license_keys.clone(),
109 osi_license_key: value.osi_license_key.clone(),
110 text_urls: value.text_urls.clone(),
111 osi_url: value.osi_url.clone(),
112 faq_url: value.faq_url.clone(),
113 other_urls: value.other_urls.clone(),
114 category: value.category.clone(),
115 is_exception: value.is_exception,
116 is_unknown: value.is_unknown,
117 is_generic: value.is_generic,
118 notes: value.notes.clone(),
119 minimum_coverage: value.minimum_coverage,
120 standard_notice: value.standard_notice.clone(),
121 ignorable_copyrights: value.ignorable_copyrights.clone(),
122 ignorable_holders: value.ignorable_holders.clone(),
123 ignorable_authors: value.ignorable_authors.clone(),
124 ignorable_urls: value.ignorable_urls.clone(),
125 ignorable_emails: value.ignorable_emails.clone(),
126 scancode_url: value.scancode_url.clone(),
127 licensedb_url: value.licensedb_url.clone(),
128 spdx_url: value.spdx_url.clone(),
129 text: value.text.clone(),
130 })
131 }
132}