Skip to content

Commit ad98e4b

Browse files
BigtoCchipshort
authored andcommitted
refactor(metadata): Add deserializer for denom_units and aliases to handle null values
1 parent 93a793b commit ad98e4b

File tree

1 file changed

+10
-21
lines changed

1 file changed

+10
-21
lines changed

packages/std/src/metadata.rs

Lines changed: 10 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
use schemars::JsonSchema;
2-
use serde::{Deserialize, Serialize};
2+
use serde::{Deserialize, Deserializer, Serialize};
33

44
use crate::prelude::*;
55

66
/// Replicates the cosmos-sdk bank module Metadata type
77
#[derive(Serialize, Deserialize, Clone, Default, Debug, PartialEq, Eq, JsonSchema)]
88
pub struct DenomMetadata {
99
pub description: String,
10+
#[serde(deserialize_with = "deserialize_null_default")]
1011
pub denom_units: Vec<DenomUnit>,
1112
pub base: String,
1213
pub display: String,
@@ -21,27 +22,15 @@ pub struct DenomMetadata {
2122
pub struct DenomUnit {
2223
pub denom: String,
2324
pub exponent: u32,
25+
#[serde(deserialize_with = "deserialize_null_default")]
2426
pub aliases: Vec<String>,
2527
}
2628

27-
#[derive(Serialize, Deserialize, Clone, Default, Debug, PartialEq, Eq, JsonSchema)]
28-
pub struct NullableDenomMetadata {
29-
pub description: String,
30-
// denom_units is nullable: https://github.com/cosmos/cosmos-sdk/blob/main/api/cosmos/bank/v1beta1/bank.pulsar.go#L4539
31-
pub denom_units: Option<Vec<NullableDenomUnit>>,
32-
pub base: String,
33-
pub display: String,
34-
pub name: String,
35-
pub symbol: String,
36-
pub uri: String,
37-
pub uri_hash: String,
38-
}
39-
40-
/// Replicates the cosmos-sdk bank module DenomUnit type
41-
#[derive(Serialize, Deserialize, Clone, Default, Debug, PartialEq, Eq, JsonSchema)]
42-
pub struct NullableDenomUnit {
43-
pub denom: String,
44-
pub exponent: u32,
45-
// aliases is nullable: https://github.com/cosmos/cosmos-sdk/blob/main/api/cosmos/bank/v1beta1/bank.pulsar.go#L4478
46-
pub aliases: Option<Vec<String>>,
29+
fn deserialize_null_default<'de, D, T>(deserializer: D) -> Result<T, D::Error>
30+
where
31+
T: Default + Deserialize<'de>,
32+
D: Deserializer<'de>,
33+
{
34+
let opt = Option::deserialize(deserializer)?;
35+
Ok(opt.unwrap_or_default())
4736
}

0 commit comments

Comments
 (0)