git.delta.rocks / unique-network / refs/commits / 5c2480590b04

difftreelog

refactor use newtypes for ids

Yaroslav Bolyukin2021-10-12parent: #0468b88.patch.diff
in: master

1 file changed

modifiedprimitives/nft/src/lib.rsdiffbeforeafterboth
1#![cfg_attr(not(feature = "std"), no_std)]1#![cfg_attr(not(feature = "std"), no_std)]
2
3use core::convert::{TryFrom, TryInto};
24
3#[cfg(feature = "serde")]5#[cfg(feature = "serde")]
4pub use serde::{Serialize, Deserialize};6pub use serde::{Serialize, Deserialize};
57
8use 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}
6871
72#[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 {}
77
78#[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 {}
83
84impl TokenId {
85 pub fn try_next(self) -> Result<TokenId, ArithmeticError> {
86 self.0
87 .checked_add(1)
88 .ok_or(ArithmeticError::Overflow)
89 .map(Self)
90 }
91}
92
93impl From<TokenId> for U256 {
94 fn from(t: TokenId) -> Self {
95 t.0.into()
96 }
97}
98
99impl TryFrom<U256> for TokenId {
100 type Error = &'static str;
101
102 fn try_from(value: U256) -> Result<Self, Self::Error> {
103 Ok(TokenId(value.try_into().map_err(|_| "too large token id")?))
104 }
105}
106
107pub struct OverflowError;
108impl From<OverflowError> for &'static str {
109 fn from(_: OverflowError) -> Self {
110 "overflow occured"
111 }
112}
113
71pub type DecimalPoints = u8;114pub type DecimalPoints = u8;
72115
166 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 char
171 pub description: Vec<u16>, // 256 include null escape char213 pub description: Vec<u16>, // 256 include null escape char
172 pub token_prefix: Vec<u8>, // 16 include null escape char214 pub token_prefix: Vec<u8>, // 16 include null escape char
206#[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 sponsored
212 /// Some(v) - setVariableMetadata is sponsored254 /// Some(v) - setVariableMetadata is sponsored
220 pub owner_can_destroy: bool,262 pub owner_can_destroy: bool,
221}263}
264
265impl<BlockNumber: Encode + Decode> CollectionLimits<BlockNumber> {
266 pub fn account_token_ownership_limit(&self) -> u32 {
267 self.account_token_ownership_limit
268 .unwrap_or(ACCOUNT_TOKEN_OWNERSHIP_LIMIT)
269 .min(ACCOUNT_TOKEN_OWNERSHIP_LIMIT)
270 }
271}
222272
223impl<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,