aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-05-15 00:11:57 +0900
committernsfisis <nsfisis@gmail.com>2026-05-15 00:11:57 +0900
commit06d2d2f869cd4c8c48898fae28fb91d6716e35c2 (patch)
treeeb484fa37e13ab00bc658d972f9b1fef6d49c09e
parentc371c369e542b04ee93841d7a583a887a9394878 (diff)
downloadphp-shirabe-06d2d2f869cd4c8c48898fae28fb91d6716e35c2.tar.gz
php-shirabe-06d2d2f869cd4c8c48898fae28fb91d6716e35c2.tar.zst
php-shirabe-06d2d2f869cd4c8c48898fae28fb91d6716e35c2.zip
refactor(advisory): replace JsonSerializable with serde::Serialize
-rw-r--r--Cargo.toml2
-rw-r--r--crates/shirabe/src/advisory/partial_security_advisory.rs24
-rw-r--r--crates/shirabe/src/advisory/security_advisory.rs36
3 files changed, 15 insertions, 47 deletions
diff --git a/Cargo.toml b/Cargo.toml
index a742156..8dbc56f 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -10,7 +10,7 @@ edition = "2024"
shirabe-php-shim = { path = "crates/shirabe-php-shim" }
anyhow = "1.0.102"
base64 = "0.22.1"
-chrono = "0.4.44"
+chrono = { version = "0.4.44", features = ["serde"] }
indexmap = { version = "2.14.0", features = ["serde"] }
md5 = "0.7.0"
regex = "1.12.3"
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)
- }
-}