Skip to content

Commit

Permalink
fix(metadata): add support for boolean deserialization for `deprecate…
Browse files Browse the repository at this point in the history
…d` tag of version metadata (#235)

Fixes: #189
  • Loading branch information
gabelluardo committed Apr 12, 2023
1 parent e4e3108 commit 0505793
Showing 1 changed file with 24 additions and 3 deletions.
27 changes: 24 additions & 3 deletions crates/oro-common/src/packument.rs
@@ -1,6 +1,6 @@
use derive_builder::Builder;
use node_semver::Version;
use serde::{Deserialize, Serialize};
use serde::{Deserialize, Deserializer, Serialize};
use serde_json::Value;
use std::collections::HashMap;
use url::Url;
Expand Down Expand Up @@ -74,7 +74,11 @@ pub struct CorgiVersionMetadata {
pub has_shrinkwrap: Option<bool>,
#[serde(flatten)]
pub manifest: CorgiManifest,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(
default,
deserialize_with = "string_or_bool",
skip_serializing_if = "Option::is_none"
)]
pub deprecated: Option<String>,
}

Expand All @@ -89,7 +93,11 @@ pub struct VersionMetadata {
pub dist: Dist,
#[serde(rename = "_hasShrinkwrap", skip_serializing_if = "Option::is_none")]
pub has_shrinkwrap: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(
default,
deserialize_with = "string_or_bool",
skip_serializing_if = "Option::is_none"
)]
pub deprecated: Option<String>,

#[serde(flatten)]
Expand Down Expand Up @@ -130,6 +138,19 @@ impl From<VersionMetadata> for Manifest {
}
}

fn string_or_bool<'de, D, T>(deserializer: D) -> std::result::Result<Option<T>, D::Error>
where
D: Deserializer<'de>,
T: std::cmp::PartialEq<&'de str> + Deserialize<'de>,
{
let val: T = Deserialize::deserialize(deserializer)?;
if val != "false" {
Ok(Some(val))
} else {
Ok(None)
}
}

/// Representation for the `bin` field in package manifests.
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
#[serde(untagged)]
Expand Down

0 comments on commit 0505793

Please sign in to comment.