difftreelog
refactor use newtypes for ids
in: master
1 file changed
primitives/nft/src/lib.rsdiffbeforeafterboth1#![cfg_attr(not(feature = "std"), no_std)]1#![cfg_attr(not(feature = "std"), no_std)]23use core::convert::{TryFrom, TryInto};243#[cfg(feature = "serde")]5#[cfg(feature = "serde")]4pub use serde::{Serialize, Deserialize};6pub use serde::{Serialize, Deserialize};578use sp_core::U256;6use sp_runtime::sp_std::prelude::Vec;9use sp_runtime::{ArithmeticError, sp_std::prelude::Vec};7use codec::{Decode, Encode, MaxEncodedLen};10use codec::{Decode, Encode, EncodeLike, MaxEncodedLen};8pub use frame_support::{11pub use frame_support::{9 BoundedVec, construct_runtime, decl_event, decl_module, decl_storage, decl_error,12 BoundedVec, construct_runtime, decl_event, decl_module, decl_storage, decl_error,10 dispatch::DispatchResult,13 dispatch::DispatchResult,66 pub const CustomDataLimit: u32 = CUSTOM_DATA_LIMIT;69 pub const CustomDataLimit: u32 = CUSTOM_DATA_LIMIT;67}70}687172#[derive(Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Clone, Copy, Debug, Default)]73#[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))]69pub type CollectionId = u32;74pub struct CollectionId(pub u32);75impl EncodeLike<u32> for CollectionId {}76impl EncodeLike<CollectionId> for u32 {}7778#[derive(Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Clone, Copy, Debug, Default)]79#[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))]70pub type TokenId = u32;80pub struct TokenId(pub u32);81impl EncodeLike<u32> for TokenId {}82impl EncodeLike<TokenId> for u32 {}8384impl TokenId {85 pub fn try_next(self) -> Result<TokenId, ArithmeticError> {86 self.087 .checked_add(1)88 .ok_or(ArithmeticError::Overflow)89 .map(Self)90 }91}9293impl From<TokenId> for U256 {94 fn from(t: TokenId) -> Self {95 t.0.into()96 }97}9899impl TryFrom<U256> for TokenId {100 type Error = &'static str;101102 fn try_from(value: U256) -> Result<Self, Self::Error> {103 Ok(TokenId(value.try_into().map_err(|_| "too large token id")?))104 }105}106107pub struct OverflowError;108impl From<OverflowError> for &'static str {109 fn from(_: OverflowError) -> Self {110 "overflow occured"111 }112}11371pub type DecimalPoints = u8;114pub type DecimalPoints = u8;72115166 pub owner: T::AccountId,209 pub owner: T::AccountId,167 pub mode: CollectionMode,210 pub mode: CollectionMode,168 pub access: AccessMode,211 pub access: AccessMode,169 pub decimal_points: DecimalPoints,170 pub name: Vec<u16>, // 64 include null escape char212 pub name: Vec<u16>, // 64 include null escape char171 pub description: Vec<u16>, // 256 include null escape char213 pub description: Vec<u16>, // 256 include null escape char172 pub token_prefix: Vec<u8>, // 16 include null escape char214 pub token_prefix: Vec<u8>, // 16 include null escape char206#[derive(Encode, Decode, Debug, Clone, PartialEq)]248#[derive(Encode, Decode, Debug, Clone, PartialEq)]207#[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))]249#[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))]208pub struct CollectionLimits<BlockNumber: Encode + Decode> {250pub struct CollectionLimits<BlockNumber: Encode + Decode> {209 pub account_token_ownership_limit: u32,251 pub account_token_ownership_limit: Option<u32>,210 pub sponsored_data_size: u32,252 pub sponsored_data_size: u32,211 /// None - setVariableMetadata is not sponsored253 /// None - setVariableMetadata is not sponsored212 /// Some(v) - setVariableMetadata is sponsored254 /// Some(v) - setVariableMetadata is sponsored220 pub owner_can_destroy: bool,262 pub owner_can_destroy: bool,221}263}264265impl<BlockNumber: Encode + Decode> CollectionLimits<BlockNumber> {266 pub fn account_token_ownership_limit(&self) -> u32 {267 self.account_token_ownership_limit268 .unwrap_or(ACCOUNT_TOKEN_OWNERSHIP_LIMIT)269 .min(ACCOUNT_TOKEN_OWNERSHIP_LIMIT)270 }271}222272223impl<BlockNumber: Encode + Decode> Default for CollectionLimits<BlockNumber> {273impl<BlockNumber: Encode + Decode> Default for CollectionLimits<BlockNumber> {224 fn default() -> Self {274 fn default() -> Self {225 Self {275 Self {226 account_token_ownership_limit: 10_000_000,276 account_token_ownership_limit: Some(10_000_000),227 token_limit: u32::max_value(),277 token_limit: u32::max_value(),228 sponsored_data_size: u32::MAX,278 sponsored_data_size: u32::MAX,229 sponsored_data_rate_limit: None,279 sponsored_data_rate_limit: None,