diff --git a/frame/support/src/traits/tokens/misc.rs b/frame/support/src/traits/tokens/misc.rs index b4bd4640116a7..076f875be1790 100644 --- a/frame/support/src/traits/tokens/misc.rs +++ b/frame/support/src/traits/tokens/misc.rs @@ -210,6 +210,26 @@ pub trait BalanceConversion { fn to_asset_balance(balance: InBalance, asset_id: AssetId) -> Result; } +/// Simple amalgamation trait to collect together properties for an CollectionId under one roof. +pub trait CollectionId: + FullCodec + Copy + Eq + PartialEq + Debug + scale_info::TypeInfo + MaxEncodedLen +{ +} +impl CollectionId +for T +{ +} + +/// Simple amalgamation trait to collect together properties for an ItemId under one roof. +pub trait ItemId: + FullCodec + Copy + Eq + PartialEq + Debug + scale_info::TypeInfo + MaxEncodedLen +{ +} +impl ItemId +for T +{ +} + /// Trait to handle asset locking mechanism to ensure interactions with the asset can be implemented /// downstream to extend logic of Uniques current functionality. pub trait Locker { diff --git a/frame/support/src/traits/tokens/nonfungible_v2.rs b/frame/support/src/traits/tokens/nonfungible_v2.rs index 175d94324aaa4..6b461d2ebfefc 100644 --- a/frame/support/src/traits/tokens/nonfungible_v2.rs +++ b/frame/support/src/traits/tokens/nonfungible_v2.rs @@ -24,6 +24,7 @@ //! For an NFT API that has dual-level namespacing, the traits in `nonfungibles` are better to //! use. +use super::misc::ItemId; use super::nonfungibles_v2 as nonfungibles; use crate::{dispatch::DispatchResult, traits::Get}; use codec::{Decode, Encode}; @@ -33,7 +34,7 @@ use sp_std::prelude::*; /// Trait for providing an interface to a read-only NFT-like item. pub trait Inspect { /// Type for identifying an item. - type ItemId; + type ItemId: ItemId; /// Returns the owner of `item`, or `None` if the item doesn't exist or has no /// owner. diff --git a/frame/support/src/traits/tokens/nonfungibles_v2.rs b/frame/support/src/traits/tokens/nonfungibles_v2.rs index 5deb0c568f431..03fb59605d570 100644 --- a/frame/support/src/traits/tokens/nonfungibles_v2.rs +++ b/frame/support/src/traits/tokens/nonfungibles_v2.rs @@ -27,6 +27,7 @@ //! Implementations of these traits may be converted to implementations of corresponding //! `nonfungible` traits by using the `nonfungible::ItemOf` type adapter. +use super::misc::{CollectionId, ItemId}; use crate::dispatch::{DispatchError, DispatchResult}; use codec::{Decode, Encode}; use sp_runtime::TokenError; @@ -35,11 +36,11 @@ use sp_std::prelude::*; /// Trait for providing an interface to many read-only NFT-like sets of items. pub trait Inspect { /// Type for identifying an item. - type ItemId; + type ItemId: ItemId; /// Type for identifying a collection (an identifier for an independent collection of /// items). - type CollectionId; + type CollectionId: CollectionId; /// Returns the owner of `item` of `collection`, or `None` if the item doesn't exist /// (or somehow has no owner).