diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-05-15 00:11:57 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-05-15 00:11:57 +0900 |
| commit | 06d2d2f869cd4c8c48898fae28fb91d6716e35c2 (patch) | |
| tree | eb484fa37e13ab00bc658d972f9b1fef6d49c09e /crates/shirabe/src/advisory | |
| parent | c371c369e542b04ee93841d7a583a887a9394878 (diff) | |
| download | php-shirabe-06d2d2f869cd4c8c48898fae28fb91d6716e35c2.tar.gz php-shirabe-06d2d2f869cd4c8c48898fae28fb91d6716e35c2.tar.zst php-shirabe-06d2d2f869cd4c8c48898fae28fb91d6716e35c2.zip | |
refactor(advisory): replace JsonSerializable with serde::Serialize
Diffstat (limited to 'crates/shirabe/src/advisory')
| -rw-r--r-- | crates/shirabe/src/advisory/partial_security_advisory.rs | 24 | ||||
| -rw-r--r-- | crates/shirabe/src/advisory/security_advisory.rs | 36 |
2 files changed, 14 insertions, 46 deletions
diff --git a/crates/shirabe/src/advisory/partial_security_advisory.rs b/crates/shirabe/src/advisory/partial_security_advisory.rs index 63fe998..cd64dc8 100644 --- a/crates/shirabe/src/advisory/partial_security_advisory.rs +++ b/crates/shirabe/src/advisory/partial_security_advisory.rs @@ -4,16 +4,25 @@ use anyhow::Result; use chrono::{DateTime, TimeZone, Utc}; use indexmap::IndexMap; use shirabe_external_packages::composer::pcre::preg::Preg; -use shirabe_php_shim::{JsonSerializable, PhpMixed, UnexpectedValueException}; +use shirabe_php_shim::{PhpMixed, UnexpectedValueException}; use shirabe_semver::constraint::constraint::Constraint; use shirabe_semver::constraint::constraint_interface::ConstraintInterface; use shirabe_semver::version_parser::VersionParser; use crate::advisory::security_advisory::SecurityAdvisory; -#[derive(Debug)] +fn serialize_constraint<S: serde::Serializer>( + c: &Box<dyn ConstraintInterface>, + serializer: S, +) -> Result<S::Ok, S::Error> { + serializer.serialize_str(&c.get_pretty_string()) +} + +#[derive(Debug, serde::Serialize)] +#[serde(rename_all = "camelCase")] pub struct PartialSecurityAdvisory { pub advisory_id: String, pub package_name: String, + #[serde(serialize_with = "serialize_constraint")] pub affected_versions: Box<dyn ConstraintInterface>, } @@ -76,14 +85,3 @@ impl PartialSecurityAdvisory { Self { advisory_id, package_name, affected_versions } } } - -impl JsonSerializable for PartialSecurityAdvisory { - fn json_serialize(&self) -> PhpMixed { - use indexmap::IndexMap; - let mut data: IndexMap<String, Box<PhpMixed>> = IndexMap::new(); - data.insert("advisoryId".to_string(), Box::new(PhpMixed::String(self.advisory_id.clone()))); - data.insert("packageName".to_string(), Box::new(PhpMixed::String(self.package_name.clone()))); - data.insert("affectedVersions".to_string(), Box::new(PhpMixed::String(self.affected_versions.get_pretty_string()))); - PhpMixed::Array(data) - } -} diff --git a/crates/shirabe/src/advisory/security_advisory.rs b/crates/shirabe/src/advisory/security_advisory.rs index cbfbb77..049169d 100644 --- a/crates/shirabe/src/advisory/security_advisory.rs +++ b/crates/shirabe/src/advisory/security_advisory.rs @@ -2,14 +2,15 @@ use chrono::{DateTime, Utc}; use indexmap::IndexMap; -use shirabe_php_shim::{JsonSerializable, PhpMixed}; use shirabe_semver::constraint::constraint_interface::ConstraintInterface; use crate::advisory::ignored_security_advisory::IgnoredSecurityAdvisory; use crate::advisory::partial_security_advisory::PartialSecurityAdvisory; -#[derive(Debug)] +#[derive(Debug, serde::Serialize)] +#[serde(rename_all = "camelCase")] pub struct SecurityAdvisory { + #[serde(flatten)] inner: PartialSecurityAdvisory, pub title: String, pub cve: Option<String>, @@ -59,34 +60,3 @@ impl SecurityAdvisory { ) } } - -impl JsonSerializable for SecurityAdvisory { - fn json_serialize(&self) -> PhpMixed { - let mut data = match self.inner.json_serialize() { - PhpMixed::Array(m) => m, - _ => IndexMap::new(), - }; - data.insert("title".to_string(), Box::new(PhpMixed::String(self.title.clone()))); - data.insert("cve".to_string(), Box::new(match &self.cve { - Some(s) => PhpMixed::String(s.clone()), - None => PhpMixed::Null, - })); - data.insert("link".to_string(), Box::new(match &self.link { - Some(s) => PhpMixed::String(s.clone()), - None => PhpMixed::Null, - })); - data.insert("reportedAt".to_string(), Box::new(PhpMixed::String(self.reported_at.to_rfc3339()))); - data.insert("sources".to_string(), Box::new(PhpMixed::List( - self.sources.iter().map(|source| { - Box::new(PhpMixed::Array( - source.iter().map(|(k, v)| (k.clone(), Box::new(PhpMixed::String(v.clone())))).collect() - )) - }).collect() - ))); - data.insert("severity".to_string(), Box::new(match &self.severity { - Some(s) => PhpMixed::String(s.clone()), - None => PhpMixed::Null, - })); - PhpMixed::Array(data) - } -} |
