1use serde::{Deserialize, Serialize};
5
6#[derive(Serialize, Deserialize, Debug, Clone)]
7pub struct OutputLicenseRuleReference {
8 pub identifier: String,
9 pub license_expression: String,
10 pub is_license_text: bool,
11 pub is_license_notice: bool,
12 pub is_license_reference: bool,
13 pub is_license_tag: bool,
14 pub is_license_clue: bool,
15 pub is_license_intro: bool,
16 #[serde(default, skip_serializing_if = "Option::is_none")]
17 pub language: Option<String>,
18 #[serde(default, skip_serializing_if = "Option::is_none")]
19 pub rule_url: Option<String>,
20 #[serde(default)]
21 pub is_required_phrase: bool,
22 #[serde(default)]
23 pub skip_for_required_phrase_generation: bool,
24 #[serde(default, skip_serializing_if = "Vec::is_empty")]
25 pub replaced_by: Vec<String>,
26 #[serde(default)]
27 pub is_continuous: bool,
28 #[serde(default)]
29 pub is_synthetic: bool,
30 #[serde(default)]
31 pub is_from_license: bool,
32 #[serde(default)]
33 pub length: usize,
34 #[serde(default, skip_serializing_if = "Option::is_none")]
35 pub relevance: Option<u8>,
36 #[serde(default, skip_serializing_if = "Option::is_none")]
37 pub minimum_coverage: Option<u8>,
38 #[serde(default, skip_serializing_if = "Vec::is_empty")]
39 pub referenced_filenames: Vec<String>,
40 #[serde(default, skip_serializing_if = "Option::is_none")]
41 pub notes: 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 text: Option<String>,
54}
55
56impl From<&crate::models::LicenseRuleReference> for OutputLicenseRuleReference {
57 fn from(value: &crate::models::LicenseRuleReference) -> Self {
58 Self {
59 identifier: value.identifier.clone(),
60 license_expression: value.license_expression.clone(),
61 is_license_text: value.is_license_text,
62 is_license_notice: value.is_license_notice,
63 is_license_reference: value.is_license_reference,
64 is_license_tag: value.is_license_tag,
65 is_license_clue: value.is_license_clue,
66 is_license_intro: value.is_license_intro,
67 language: value.language.clone(),
68 rule_url: value.rule_url.clone(),
69 is_required_phrase: value.is_required_phrase,
70 skip_for_required_phrase_generation: value.skip_for_required_phrase_generation,
71 replaced_by: value.replaced_by.clone(),
72 is_continuous: value.is_continuous,
73 is_synthetic: value.is_synthetic,
74 is_from_license: value.is_from_license,
75 length: value.length,
76 relevance: value.relevance,
77 minimum_coverage: value.minimum_coverage,
78 referenced_filenames: value.referenced_filenames.clone(),
79 notes: value.notes.clone(),
80 ignorable_copyrights: value.ignorable_copyrights.clone(),
81 ignorable_holders: value.ignorable_holders.clone(),
82 ignorable_authors: value.ignorable_authors.clone(),
83 ignorable_urls: value.ignorable_urls.clone(),
84 ignorable_emails: value.ignorable_emails.clone(),
85 text: value.text.clone(),
86 }
87 }
88}
89
90impl TryFrom<&OutputLicenseRuleReference> for crate::models::LicenseRuleReference {
91 type Error = String;
92 fn try_from(value: &OutputLicenseRuleReference) -> Result<Self, Self::Error> {
93 Ok(Self {
94 identifier: value.identifier.clone(),
95 license_expression: value.license_expression.clone(),
96 is_license_text: value.is_license_text,
97 is_license_notice: value.is_license_notice,
98 is_license_reference: value.is_license_reference,
99 is_license_tag: value.is_license_tag,
100 is_license_clue: value.is_license_clue,
101 is_license_intro: value.is_license_intro,
102 language: value.language.clone(),
103 rule_url: value.rule_url.clone(),
104 is_required_phrase: value.is_required_phrase,
105 skip_for_required_phrase_generation: value.skip_for_required_phrase_generation,
106 replaced_by: value.replaced_by.clone(),
107 is_continuous: value.is_continuous,
108 is_synthetic: value.is_synthetic,
109 is_from_license: value.is_from_license,
110 length: value.length,
111 relevance: value.relevance,
112 minimum_coverage: value.minimum_coverage,
113 referenced_filenames: value.referenced_filenames.clone(),
114 notes: value.notes.clone(),
115 ignorable_copyrights: value.ignorable_copyrights.clone(),
116 ignorable_holders: value.ignorable_holders.clone(),
117 ignorable_authors: value.ignorable_authors.clone(),
118 ignorable_urls: value.ignorable_urls.clone(),
119 ignorable_emails: value.ignorable_emails.clone(),
120 text: value.text.clone(),
121 })
122 }
123}