diff options
Diffstat (limited to 'crates/shirabe/src/advisory')
| -rw-r--r-- | crates/shirabe/src/advisory/ignored_security_advisory.rs | 4 | ||||
| -rw-r--r-- | crates/shirabe/src/advisory/partial_security_advisory.rs | 39 | ||||
| -rw-r--r-- | crates/shirabe/src/advisory/security_advisory.rs | 10 |
3 files changed, 27 insertions, 26 deletions
diff --git a/crates/shirabe/src/advisory/ignored_security_advisory.rs b/crates/shirabe/src/advisory/ignored_security_advisory.rs index 1cd5f75..140c00b 100644 --- a/crates/shirabe/src/advisory/ignored_security_advisory.rs +++ b/crates/shirabe/src/advisory/ignored_security_advisory.rs @@ -4,7 +4,7 @@ use crate::advisory::SecurityAdvisory; use chrono::{DateTime, Utc}; use indexmap::IndexMap; use shirabe_php_shim::PhpMixed; -use shirabe_semver::constraint::ConstraintInterface; +use shirabe_semver::constraint::AnyConstraint; #[derive(Debug, serde::Serialize)] #[serde(rename_all = "camelCase")] @@ -19,7 +19,7 @@ impl IgnoredSecurityAdvisory { pub fn new( package_name: String, advisory_id: String, - affected_versions: Box<dyn ConstraintInterface>, + affected_versions: AnyConstraint, title: String, sources: Vec<IndexMap<String, String>>, reported_at: DateTime<Utc>, diff --git a/crates/shirabe/src/advisory/partial_security_advisory.rs b/crates/shirabe/src/advisory/partial_security_advisory.rs index 6953ef3..fe3c99e 100644 --- a/crates/shirabe/src/advisory/partial_security_advisory.rs +++ b/crates/shirabe/src/advisory/partial_security_advisory.rs @@ -7,12 +7,12 @@ use chrono::{DateTime, TimeZone, Utc}; use indexmap::IndexMap; use shirabe_external_packages::composer::pcre::Preg; use shirabe_php_shim::{PhpMixed, UnexpectedValueException}; -use shirabe_semver::constraint::Constraint; -use shirabe_semver::constraint::ConstraintInterface; +use shirabe_semver::constraint::AnyConstraint; +use shirabe_semver::constraint::SimpleConstraint; use shirabe_semver::version_parser::VersionParser; fn serialize_constraint<S: serde::Serializer>( - c: &Box<dyn ConstraintInterface>, + c: &AnyConstraint, serializer: S, ) -> Result<S::Ok, S::Error> { serializer.serialize_str(&c.get_pretty_string()) @@ -24,7 +24,7 @@ pub struct PartialSecurityAdvisory { pub advisory_id: String, pub package_name: String, #[serde(serialize_with = "serialize_constraint")] - pub affected_versions: Box<dyn ConstraintInterface>, + pub affected_versions: AnyConstraint, } impl PartialSecurityAdvisory { @@ -35,21 +35,22 @@ impl PartialSecurityAdvisory { ) -> Result<PartialOrSecurityAdvisory> { let affected_versions_str = data["affectedVersions"].as_string().unwrap_or(""); - let constraint: Box<dyn ConstraintInterface> = - match parser.parse_constraints(affected_versions_str) { - Ok(c) => c, - Err(_) => { - let affected_version = - Preg::replace(r"(^[>=<^~]*[\d.]+).*", "$1", affected_versions_str); - match parser.parse_constraints(affected_version.as_deref().unwrap_or("")) { - Ok(c) => c, - Err(_) => Box::new(Constraint::new( - "==".to_string(), - "0.0.0-invalid-version".to_string(), - )), - } + let constraint: AnyConstraint = match parser.parse_constraints(affected_versions_str) { + Ok(c) => c, + Err(_) => { + let affected_version = + Preg::replace(r"(^[>=<^~]*[\d.]+).*", "$1", affected_versions_str); + match parser.parse_constraints(affected_version.as_deref().unwrap_or("")) { + Ok(c) => c, + Err(_) => SimpleConstraint::new( + "==".to_string(), + "0.0.0-invalid-version".to_string(), + None, + ) + .into(), } - }; + } + }; let has_full_data = data.contains_key("title") && data.contains_key("sources") @@ -93,7 +94,7 @@ impl PartialSecurityAdvisory { pub fn new( package_name: String, advisory_id: String, - affected_versions: Box<dyn ConstraintInterface>, + affected_versions: AnyConstraint, ) -> Self { Self { advisory_id, diff --git a/crates/shirabe/src/advisory/security_advisory.rs b/crates/shirabe/src/advisory/security_advisory.rs index 9787d37..edb161c 100644 --- a/crates/shirabe/src/advisory/security_advisory.rs +++ b/crates/shirabe/src/advisory/security_advisory.rs @@ -2,7 +2,7 @@ use chrono::{DateTime, Utc}; use indexmap::IndexMap; -use shirabe_semver::constraint::ConstraintInterface; +use shirabe_semver::constraint::AnyConstraint; use crate::advisory::IgnoredSecurityAdvisory; use crate::advisory::PartialSecurityAdvisory; @@ -24,7 +24,7 @@ impl SecurityAdvisory { pub fn new( package_name: String, advisory_id: String, - affected_versions: Box<dyn ConstraintInterface>, + affected_versions: AnyConstraint, title: String, sources: Vec<IndexMap<String, String>>, reported_at: DateTime<Utc>, @@ -48,15 +48,15 @@ impl SecurityAdvisory { &self.inner.advisory_id } - pub fn affected_versions(&self) -> &dyn ConstraintInterface { - &*self.inner.affected_versions + pub fn affected_versions(&self) -> &AnyConstraint { + &self.inner.affected_versions } pub fn to_ignored_advisory(&self, ignore_reason: Option<String>) -> IgnoredSecurityAdvisory { IgnoredSecurityAdvisory::new( self.inner.package_name.clone(), self.inner.advisory_id.clone(), - self.inner.affected_versions.clone_box(), + self.inner.affected_versions.clone(), self.title.clone(), self.sources.clone(), self.reported_at, |
