From 37059c68f86ccfa87eba9a5cd9341b1b10111e23 Mon Sep 17 00:00:00 2001 From: Farhad Shabani Date: Tue, 23 Jan 2024 19:18:50 -0800 Subject: [PATCH] imp: relocate serializers.rs within the ibc-primitives --- ...55-move-serializers-into-ibc-primitives.md | 3 +++ ibc-apps/ics20-transfer/types/src/amount.rs | 3 ++- ibc-apps/ics20-transfer/types/src/denom.rs | 2 +- ibc-apps/ics20-transfer/types/src/lib.rs | 3 --- .../ics721-nft-transfer/types/src/class.rs | 2 +- ibc-apps/ics721-nft-transfer/types/src/lib.rs | 3 --- .../ics721-nft-transfer/types/src/packet.rs | 3 +-- .../types/src/serializers.rs | 27 ------------------- .../ics721-nft-transfer/types/src/token.rs | 2 +- ibc-primitives/src/lib.rs | 5 ++++ .../src/serializers.rs | 12 ++++----- 11 files changed, 20 insertions(+), 45 deletions(-) create mode 100644 .changelog/unreleased/improvements/1055-move-serializers-into-ibc-primitives.md delete mode 100644 ibc-apps/ics721-nft-transfer/types/src/serializers.rs rename {ibc-apps/ics20-transfer/types => ibc-primitives}/src/serializers.rs (63%) diff --git a/.changelog/unreleased/improvements/1055-move-serializers-into-ibc-primitives.md b/.changelog/unreleased/improvements/1055-move-serializers-into-ibc-primitives.md new file mode 100644 index 000000000..495624bc2 --- /dev/null +++ b/.changelog/unreleased/improvements/1055-move-serializers-into-ibc-primitives.md @@ -0,0 +1,3 @@ +- [ibc-primitives] Relocate `serializers.rs` module to reside within the + `ibc-primitives` crate extending its utility for a broader range of IBC + applications. ([\#1055](https://github.com/cosmos/ibc-rs/issues/1055)) diff --git a/ibc-apps/ics20-transfer/types/src/amount.rs b/ibc-apps/ics20-transfer/types/src/amount.rs index 5c3802d2d..89d3531a6 100644 --- a/ibc-apps/ics20-transfer/types/src/amount.rs +++ b/ibc-apps/ics20-transfer/types/src/amount.rs @@ -4,6 +4,7 @@ use core::str::FromStr; use derive_more::{Display, From, Into}; use ibc_core::primitives::prelude::*; +use ibc_core::primitives::serializers; use primitive_types::U256; use super::error::TokenTransferError; @@ -14,7 +15,7 @@ use super::error::TokenTransferError; #[derive(Copy, Clone, Debug, Eq, PartialEq, PartialOrd, Ord, Display, From, Into)] pub struct Amount( #[cfg_attr(feature = "schema", schemars(with = "String"))] - #[serde(serialize_with = "crate::serializers::serialize")] + #[serde(serialize_with = "serializers::serialize")] #[serde(deserialize_with = "deserialize")] U256, ); diff --git a/ibc-apps/ics20-transfer/types/src/denom.rs b/ibc-apps/ics20-transfer/types/src/denom.rs index 92f60c9d3..a6ee5aad2 100644 --- a/ibc-apps/ics20-transfer/types/src/denom.rs +++ b/ibc-apps/ics20-transfer/types/src/denom.rs @@ -5,10 +5,10 @@ use core::str::FromStr; use derive_more::{Display, From}; use ibc_core::host::types::identifiers::{ChannelId, PortId}; use ibc_core::primitives::prelude::*; +use ibc_core::primitives::serializers; use ibc_proto::ibc::applications::transfer::v1::DenomTrace as RawDenomTrace; use super::error::TokenTransferError; -use crate::serializers; /// The "base" of a denomination. /// diff --git a/ibc-apps/ics20-transfer/types/src/lib.rs b/ibc-apps/ics20-transfer/types/src/lib.rs index fd510cc9f..44fe89603 100644 --- a/ibc-apps/ics20-transfer/types/src/lib.rs +++ b/ibc-apps/ics20-transfer/types/src/lib.rs @@ -34,9 +34,6 @@ pub mod msgs; #[cfg(feature = "serde")] pub mod packet; -#[cfg(feature = "serde")] -pub(crate) mod serializers; - pub mod error; mod memo; pub use memo::*; diff --git a/ibc-apps/ics721-nft-transfer/types/src/class.rs b/ibc-apps/ics721-nft-transfer/types/src/class.rs index 278a90a07..41d150fa0 100644 --- a/ibc-apps/ics721-nft-transfer/types/src/class.rs +++ b/ibc-apps/ics721-nft-transfer/types/src/class.rs @@ -6,11 +6,11 @@ use derive_more::From; use http::Uri; use ibc_core::host::types::identifiers::{ChannelId, PortId}; use ibc_core::primitives::prelude::*; +use ibc_core::primitives::serializers; use ibc_proto::ibc::applications::nft_transfer::v1::ClassTrace as RawClassTrace; use crate::data::Data; use crate::error::NftTransferError; -use crate::serializers; /// Class ID for an NFT #[cfg_attr( diff --git a/ibc-apps/ics721-nft-transfer/types/src/lib.rs b/ibc-apps/ics721-nft-transfer/types/src/lib.rs index b429ce1a3..8ca548269 100644 --- a/ibc-apps/ics721-nft-transfer/types/src/lib.rs +++ b/ibc-apps/ics721-nft-transfer/types/src/lib.rs @@ -36,9 +36,6 @@ mod token; #[cfg(feature = "serde")] pub use token::*; -#[cfg(feature = "serde")] -pub(crate) mod serializers; - pub mod error; mod memo; pub use memo::*; diff --git a/ibc-apps/ics721-nft-transfer/types/src/packet.rs b/ibc-apps/ics721-nft-transfer/types/src/packet.rs index a870ae436..183dbc2bf 100644 --- a/ibc-apps/ics721-nft-transfer/types/src/packet.rs +++ b/ibc-apps/ics721-nft-transfer/types/src/packet.rs @@ -5,13 +5,12 @@ use core::convert::TryFrom; use base64::prelude::BASE64_STANDARD; use base64::Engine; use ibc_core::primitives::prelude::*; -use ibc_core::primitives::Signer; +use ibc_core::primitives::{serializers, Signer}; use ibc_proto::ibc::applications::nft_transfer::v1::NonFungibleTokenPacketData as RawPacketData; use crate::class::{ClassData, ClassUri, PrefixedClassId}; use crate::error::NftTransferError; use crate::memo::Memo; -use crate::serializers; use crate::token::{TokenData, TokenIds, TokenUri}; /// Defines the structure of token transfers' packet bytes diff --git a/ibc-apps/ics721-nft-transfer/types/src/serializers.rs b/ibc-apps/ics721-nft-transfer/types/src/serializers.rs deleted file mode 100644 index 65c4d2ba6..000000000 --- a/ibc-apps/ics721-nft-transfer/types/src/serializers.rs +++ /dev/null @@ -1,27 +0,0 @@ -use core::fmt::Display; -use core::str::FromStr; - -use ibc_core::primitives::prelude::*; -use serde::{de, Deserialize, Deserializer, Serializer}; - -// Note: This method serializes to a String instead of a str -// in order to avoid a wasm compilation issue. Specifically, -// str (de)serialization hits some kind of f64/f32 case -// when compiled into wasm, but this fails validation on -// f32/f64 wasm runtimes. -pub fn serialize(value: &T, serializer: S) -> Result -where - T: Display, - S: Serializer, -{ - serializer.serialize_str(value.to_string().as_ref()) -} - -pub fn deserialize<'de, T, D>(deserializer: D) -> Result -where - T: FromStr, - T::Err: Display, - D: Deserializer<'de>, -{ - T::from_str(::deserialize(deserializer)?.as_str()).map_err(de::Error::custom) -} diff --git a/ibc-apps/ics721-nft-transfer/types/src/token.rs b/ibc-apps/ics721-nft-transfer/types/src/token.rs index 4965d49be..ca8adb343 100644 --- a/ibc-apps/ics721-nft-transfer/types/src/token.rs +++ b/ibc-apps/ics721-nft-transfer/types/src/token.rs @@ -4,10 +4,10 @@ use core::str::FromStr; use http::Uri; use ibc_core::primitives::prelude::*; +use ibc_core::primitives::serializers; use crate::data::Data; use crate::error::NftTransferError; -use crate::serializers; /// Token ID for an NFT #[cfg_attr( diff --git a/ibc-primitives/src/lib.rs b/ibc-primitives/src/lib.rs index 0e4d4bcac..a93811ece 100644 --- a/ibc-primitives/src/lib.rs +++ b/ibc-primitives/src/lib.rs @@ -25,6 +25,11 @@ pub use traits::*; mod types; pub use types::*; +// Helper module for serializing and deserializing types through the `String` +// primarily used by IBC applications. +#[cfg(feature = "serde")] +pub mod serializers; + /// Re-export of common proto types from the `ibc-proto` crate. pub mod proto { pub use ibc_proto::google::protobuf::Any; diff --git a/ibc-apps/ics20-transfer/types/src/serializers.rs b/ibc-primitives/src/serializers.rs similarity index 63% rename from ibc-apps/ics20-transfer/types/src/serializers.rs rename to ibc-primitives/src/serializers.rs index 65c4d2ba6..d61756ea1 100644 --- a/ibc-apps/ics20-transfer/types/src/serializers.rs +++ b/ibc-primitives/src/serializers.rs @@ -1,14 +1,14 @@ use core::fmt::Display; use core::str::FromStr; -use ibc_core::primitives::prelude::*; use serde::{de, Deserialize, Deserializer, Serializer}; -// Note: This method serializes to a String instead of a str -// in order to avoid a wasm compilation issue. Specifically, -// str (de)serialization hits some kind of f64/f32 case -// when compiled into wasm, but this fails validation on -// f32/f64 wasm runtimes. +use crate::prelude::*; + +// Note: This method serializes to a String instead of a str in order to +// avoid a wasm compilation issue. Specifically, str (de)serialization hits +// some kind of f64/f32 case when compiled into wasm, but this fails +// validation on f32/f64 wasm runtimes. pub fn serialize(value: &T, serializer: S) -> Result where T: Display,