11use schemars:: JsonSchema ;
2- use serde:: { Deserialize , Serialize } ;
2+ use serde:: { Deserialize , Deserializer , Serialize } ;
33
44use crate :: prelude:: * ;
55
66/// Replicates the cosmos-sdk bank module Metadata type
77#[ derive( Serialize , Deserialize , Clone , Default , Debug , PartialEq , Eq , JsonSchema ) ]
88pub 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 {
2122pub 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