Skip to content

Commit 9867f9b

Browse files
committed
Refactor "Validate" trait return type
Signed-off-by: Sebastian Ziebell <[email protected]>
1 parent 0aa9ee0 commit 9867f9b

33 files changed

+539
-903
lines changed

cargo-cyclonedx/src/generator.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ impl SbomGenerator {
9999
let bom = generator.create_bom(member, &dependencies, &pruned_resolve)?;
100100

101101
if cfg!(debug_assertions) {
102-
let result = bom.validate().unwrap();
102+
let result = bom.validate();
103103
if let ValidationResult::Failed { reasons } = result {
104104
panic!("The generated SBOM failed validation: {:?}", &reasons);
105105
}

cargo-cyclonedx/src/purl.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ fn to_purl_subpath(path: &Utf8Path) -> String {
8282

8383
fn assert_validation_passes(purl: &CdxPurl) {
8484
use cyclonedx_bom::validation::{Validate, ValidationResult};
85-
assert_eq!(purl.validate().unwrap(), ValidationResult::Passed);
85+
assert_eq!(purl.validate(), ValidationResult::Passed);
8686
}
8787

8888
#[cfg(test)]

cargo-cyclonedx/tests/cli.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,6 @@ fn find_content_in_bom_files() -> Result<(), Box<dyn std::error::Error>> {
7575
}
7676

7777
#[test]
78-
#[ignore]
7978
fn find_content_in_stderr() -> Result<(), Box<dyn std::error::Error>> {
8079
let tmp_dir = make_temp_rust_project()?;
8180

cyclonedx-bom/src/external_models/date_time.rs

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,7 @@ use std::convert::TryFrom;
2121
use thiserror::Error;
2222
use time::{format_description::well_known::Iso8601, OffsetDateTime};
2323

24-
use crate::validation::{
25-
FailureReason, Validate, ValidationContext, ValidationError, ValidationResult,
26-
};
24+
use crate::validation::{FailureReason, Validate, ValidationContext, ValidationResult};
2725

2826
/// For the purposes of CycloneDX SBOM documents, `DateTime` is a ISO8601 formatted timestamp
2927
///
@@ -67,18 +65,15 @@ impl TryFrom<String> for DateTime {
6765
}
6866

6967
impl Validate for DateTime {
70-
fn validate_with_context(
71-
&self,
72-
context: ValidationContext,
73-
) -> Result<ValidationResult, ValidationError> {
68+
fn validate_with_context(&self, context: ValidationContext) -> ValidationResult {
7469
match OffsetDateTime::parse(&self.0.to_string(), &Iso8601::DEFAULT) {
75-
Ok(_) => Ok(ValidationResult::Passed),
76-
Err(_) => Ok(ValidationResult::Failed {
70+
Ok(_) => ValidationResult::Passed,
71+
Err(_) => ValidationResult::Failed {
7772
reasons: vec![FailureReason {
7873
message: "DateTime does not conform to ISO 8601".to_string(),
7974
context,
8075
}],
81-
}),
76+
},
8277
}
8378
}
8479
}
@@ -106,18 +101,14 @@ mod test {
106101

107102
#[test]
108103
fn valid_datetimes_should_pass_validation() {
109-
let validation_result = DateTime("1969-06-28T01:20:00.00-04:00".to_string())
110-
.validate_with_context(ValidationContext::default())
111-
.expect("Error while validating");
104+
let validation_result = DateTime("1969-06-28T01:20:00.00-04:00".to_string()).validate();
112105

113106
assert_eq!(validation_result, ValidationResult::Passed)
114107
}
115108

116109
#[test]
117110
fn invalid_datetimes_should_fail_validation() {
118-
let validation_result = DateTime("invalid date".to_string())
119-
.validate_with_context(ValidationContext::default())
120-
.expect("Error while validating");
111+
let validation_result = DateTime("invalid date".to_string()).validate();
121112

122113
assert_eq!(
123114
validation_result,

cyclonedx-bom/src/external_models/normalized_string.rs

Lines changed: 9 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,7 @@
1616
* SPDX-License-Identifier: Apache-2.0
1717
*/
1818

19-
use crate::validation::{
20-
FailureReason, Validate, ValidationContext, ValidationError, ValidationResult,
21-
};
19+
use crate::validation::{Validate, ValidationContext, ValidationResult};
2220
use std::fmt::Display;
2321
use std::ops::Deref;
2422

@@ -68,25 +66,19 @@ impl Display for NormalizedString {
6866
}
6967

7068
impl Validate for NormalizedString {
71-
fn validate_with_context(
72-
&self,
73-
context: ValidationContext,
74-
) -> Result<ValidationResult, ValidationError> {
69+
fn validate_with_context(&self, context: ValidationContext) -> ValidationResult {
7570
if self.0.contains("\r\n")
7671
|| self.0.contains('\r')
7772
|| self.0.contains('\n')
7873
|| self.0.contains('\t')
7974
{
80-
return Ok(ValidationResult::Failed {
81-
reasons: vec![FailureReason {
82-
message: "NormalizedString contains invalid characters \\r \\n \\t or \\r\\n"
83-
.to_string(),
84-
context,
85-
}],
86-
});
75+
return ValidationResult::failure(
76+
"NormalizedString contains invalid characters \\r \\n \\t or \\r\\n",
77+
context,
78+
);
8779
}
8880

89-
Ok(ValidationResult::Passed)
81+
ValidationResult::Passed
9082
}
9183
}
9284

@@ -114,18 +106,14 @@ mod test {
114106

115107
#[test]
116108
fn it_should_pass_validation() {
117-
let validation_result = NormalizedString("no_whitespace".to_string())
118-
.validate_with_context(ValidationContext::default())
119-
.expect("Error while validating");
109+
let validation_result = NormalizedString("no_whitespace".to_string()).validate();
120110

121111
assert_eq!(validation_result, ValidationResult::Passed);
122112
}
123113

124114
#[test]
125115
fn it_should_fail_validation() {
126-
let validation_result = NormalizedString("spaces and\ttabs".to_string())
127-
.validate_with_context(ValidationContext::default())
128-
.expect("Error while validating");
116+
let validation_result = NormalizedString("spaces and\ttabs".to_string()).validate();
129117

130118
assert_eq!(
131119
validation_result,

cyclonedx-bom/src/external_models/spdx.rs

Lines changed: 12 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -84,15 +84,15 @@ impl Validate for SpdxIdentifier {
8484
fn validate_with_context(
8585
&self,
8686
context: crate::validation::ValidationContext,
87-
) -> Result<ValidationResult, crate::validation::ValidationError> {
87+
) -> ValidationResult {
8888
match Self::try_from(self.0.clone()) {
89-
Ok(_) => Ok(ValidationResult::Passed),
90-
Err(_) => Ok(ValidationResult::Failed {
89+
Ok(_) => ValidationResult::Passed,
90+
Err(_) => ValidationResult::Failed {
9191
reasons: vec![FailureReason {
9292
message: "SPDX identifier is not valid".to_string(),
9393
context,
9494
}],
95-
}),
95+
},
9696
}
9797
}
9898
}
@@ -184,15 +184,15 @@ impl Validate for SpdxExpression {
184184
fn validate_with_context(
185185
&self,
186186
context: crate::validation::ValidationContext,
187-
) -> Result<crate::validation::ValidationResult, crate::validation::ValidationError> {
187+
) -> ValidationResult {
188188
match SpdxExpression::try_from(self.0.clone()) {
189-
Ok(_) => Ok(ValidationResult::Passed),
190-
Err(_) => Ok(ValidationResult::Failed {
189+
Ok(_) => ValidationResult::Passed,
190+
Err(_) => ValidationResult::Failed {
191191
reasons: vec![FailureReason {
192192
message: "SPDX expression is not valid".to_string(),
193193
context,
194194
}],
195-
}),
195+
},
196196
}
197197
}
198198
}
@@ -257,18 +257,14 @@ mod test {
257257

258258
#[test]
259259
fn valid_spdx_identifiers_should_pass_validation() {
260-
let validation_result = SpdxIdentifier("MIT".to_string())
261-
.validate_with_context(ValidationContext::default())
262-
.expect("Error while validating");
260+
let validation_result = SpdxIdentifier("MIT".to_string()).validate();
263261

264262
assert_eq!(validation_result, ValidationResult::Passed);
265263
}
266264

267265
#[test]
268266
fn invalid_spdx_identifiers_should_fail_validation() {
269-
let validation_result = SpdxIdentifier("MIT OR Apache-2.0".to_string())
270-
.validate_with_context(ValidationContext::default())
271-
.expect("Error while validating");
267+
let validation_result = SpdxIdentifier("MIT OR Apache-2.0".to_string()).validate();
272268

273269
assert_eq!(
274270
validation_result,
@@ -307,18 +303,14 @@ mod test {
307303

308304
#[test]
309305
fn valid_spdx_expressions_should_pass_validation() {
310-
let validation_result = SpdxExpression("MIT OR Apache-2.0".to_string())
311-
.validate_with_context(ValidationContext::default())
312-
.expect("Error while validating");
306+
let validation_result = SpdxExpression("MIT OR Apache-2.0".to_string()).validate();
313307

314308
assert_eq!(validation_result, ValidationResult::Passed);
315309
}
316310

317311
#[test]
318312
fn invalid_spdx_expressions_should_fail_validation() {
319-
let validation_result = SpdxExpression("not a real license".to_string())
320-
.validate_with_context(ValidationContext::default())
321-
.expect("Error while validating");
313+
let validation_result = SpdxExpression("not a real license".to_string()).validate();
322314

323315
assert_eq!(
324316
validation_result,

cyclonedx-bom/src/external_models/uri.rs

Lines changed: 14 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,7 @@ use fluent_uri::Uri as Url;
2222
use packageurl::PackageUrl;
2323
use thiserror::Error;
2424

25-
use crate::validation::{
26-
FailureReason, Validate, ValidationContext, ValidationError, ValidationResult,
27-
};
25+
use crate::validation::{Validate, ValidationContext, ValidationResult};
2826

2927
#[derive(Debug, Clone, PartialEq, Eq)]
3028
pub struct Purl(pub(crate) String);
@@ -45,18 +43,13 @@ impl ToString for Purl {
4543
}
4644

4745
impl Validate for Purl {
48-
fn validate_with_context(
49-
&self,
50-
context: ValidationContext,
51-
) -> Result<ValidationResult, ValidationError> {
46+
fn validate_with_context(&self, context: ValidationContext) -> ValidationResult {
5247
match PackageUrl::from_str(&self.0.to_string()) {
53-
Ok(_) => Ok(ValidationResult::Passed),
54-
Err(e) => Ok(ValidationResult::Failed {
55-
reasons: vec![FailureReason {
56-
message: format!("Purl does not conform to Package URL spec: {}", e),
57-
context,
58-
}],
59-
}),
48+
Ok(_) => ValidationResult::Passed,
49+
Err(e) => ValidationResult::failure(
50+
&format!("Purl does not conform to Package URL spec: {}", e),
51+
context,
52+
),
6053
}
6154
}
6255
}
@@ -85,18 +78,10 @@ impl TryFrom<String> for Uri {
8578
}
8679

8780
impl Validate for Uri {
88-
fn validate_with_context(
89-
&self,
90-
context: ValidationContext,
91-
) -> Result<ValidationResult, ValidationError> {
81+
fn validate_with_context(&self, context: ValidationContext) -> ValidationResult {
9282
match Url::parse(&self.0.to_string()) {
93-
Ok(_) => Ok(ValidationResult::Passed),
94-
Err(_) => Ok(ValidationResult::Failed {
95-
reasons: vec![FailureReason {
96-
message: "Uri does not conform to RFC 3986".to_string(),
97-
context,
98-
}],
99-
}),
83+
Ok(_) => ValidationResult::Passed,
84+
Err(_) => ValidationResult::failure("Uri does not conform to RFC 3986", context),
10085
}
10186
}
10287
}
@@ -126,18 +111,14 @@ mod test {
126111

127112
#[test]
128113
fn valid_purls_should_pass_validation() {
129-
let validation_result = Purl("pkg:cargo/[email protected]".to_string())
130-
.validate_with_context(ValidationContext::default())
131-
.expect("Error while validating");
114+
let validation_result = Purl("pkg:cargo/[email protected]".to_string()).validate();
132115

133116
assert_eq!(validation_result, ValidationResult::Passed);
134117
}
135118

136119
#[test]
137120
fn invalid_purls_should_fail_validation() {
138-
let validation_result = Purl("invalid purl".to_string())
139-
.validate_with_context(ValidationContext::default())
140-
.expect("Error while validating");
121+
let validation_result = Purl("invalid purl".to_string()).validate();
141122

142123
assert_eq!(
143124
validation_result,
@@ -153,18 +134,14 @@ mod test {
153134

154135
#[test]
155136
fn valid_uris_should_pass_validation() {
156-
let validation_result = Uri("https://example.com".to_string())
157-
.validate_with_context(ValidationContext::default())
158-
.expect("Error while validating");
137+
let validation_result = Uri("https://example.com".to_string()).validate();
159138

160139
assert_eq!(validation_result, ValidationResult::Passed);
161140
}
162141

163142
#[test]
164143
fn invalid_uris_should_fail_validation() {
165-
let validation_result = Uri("invalid uri".to_string())
166-
.validate_with_context(ValidationContext::default())
167-
.expect("Error while validating");
144+
let validation_result = Uri("invalid uri".to_string()).validate();
168145

169146
assert_eq!(
170147
validation_result,

cyclonedx-bom/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646
//! }"#;
4747
//! let bom = Bom::parse_from_json_v1_3(bom_json.as_bytes()).expect("Failed to parse BOM");
4848
//!
49-
//! let validation_result = bom.validate().expect("Failed to validate BOM");
49+
//! let validation_result = bom.validate();
5050
//! assert_eq!(validation_result, ValidationResult::Passed);
5151
//! ```
5252
//!

0 commit comments

Comments
 (0)