difftreelog
feat add property_guard
in: master
1 file changed
pallets/nonfungible/src/property_guard.rsdiffbeforeafterboth1use super::*;23pub struct PropertyGuard<'a, T: Config> {4 pub sender: &'a T::CrossAccountId,5 pub collection: &'a NonfungibleHandle<T>,6 pub token: TokenId,7 pub is_token_create: bool,8 budget: &'a dyn Budget,910 collection_admin_result: Option<DispatchResult>,11 token_owner_result: Option<DispatchResult>,12}1314impl<'a, T: Config> PropertyGuard<'a, T> {15 pub fn new(16 sender: &'a T::CrossAccountId,17 collection: &'a NonfungibleHandle<T>,18 token: TokenId,19 is_token_create: bool,20 budget: &'a dyn Budget,21 ) -> Self {22 Self {23 sender,24 collection,25 token,26 is_token_create,27 budget,2829 collection_admin_result: None,30 token_owner_result: None31 }32 }3334 pub fn check_collection_admin(&mut self) -> DispatchResult {35 if self.collection_admin_result.is_none() {36 self.collection_admin_result = Some(self.collection.check_is_owner_or_admin(self.sender));37 }3839 self.collection_admin_result.unwrap()40 }4142 pub fn check_token_owner(&mut self) -> DispatchResult {43 if self.token_owner_result.is_none() {44 let is_owned = <PalletStructure<T>>::check_indirectly_owned(45 self.sender.clone(),46 self.collection.id,47 self.token,48 None,49 self.budget,50 )?;5152 let result = if is_owned {53 Ok(())54 } else {55 Err(<CommonError<T>>::NoPermission.into())56 };5758 self.token_owner_result = Some(result);59 }6061 self.token_owner_result.unwrap()62 }63}