Skip to main content

provenant/output_schema/
license_rule_reference.rs

1// SPDX-FileCopyrightText: Provenant contributors
2// SPDX-License-Identifier: Apache-2.0
3
4use 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}