ic-canister-kit 1.0.35

An ic canister package
Documentation
use crate::types::NftStorage;

use super::super::types::*;

pub trait ExtCustom {
    fn set_nft_rarity_by_token_identifier(
        &mut self,
        token_id: ExtTokenIdentifier,
        rarity: String,
        content: Option<Option<Vec<u8>>>,
    );
    fn set_nft_content_by_token_identifier(
        &mut self,
        token_id: ExtTokenIdentifier,
        content: Option<Vec<u8>>,
    );
    fn set_nft_metadata_by_token_identifier(
        &mut self,
        token_id: ExtTokenIdentifier,
        no: usize,
        media: Option<MediaData>,
    );
    fn set_nft_thumbnail_by_token_identifier(
        &mut self,
        token_id: ExtTokenIdentifier,
        media: Option<MediaData>,
    );
    fn set_nft_ownable_by_token_identifier(
        &mut self,
        token_id: ExtTokenIdentifier,
        ownable: NFTOwnable,
    );

    fn get_nft_rarity_by_token_identifier(&self, token_id: ExtTokenIdentifier) -> String;
    fn get_nft_metadata_by_token_identifier(
        &self,
        token_id: ExtTokenIdentifier,
        no: usize,
    ) -> Option<MediaData>;
}

impl ExtCustom for NftStorage {
    fn set_nft_rarity_by_token_identifier(
        &mut self,
        token_id: ExtTokenIdentifier,
        rarity: String,
        content: Option<Option<Vec<u8>>>,
    ) {
        let token_index = super::utils::parse_token_index_with_self_canister(&token_id);
        if let Ok(index) = token_index {
            let index = index as usize;
            self.set_nft_rarity(index, rarity);

            if let Some(content) = content {
                self.set_nft_content(index, content);
            }
        }
    }
    fn set_nft_content_by_token_identifier(
        &mut self,
        token_id: ExtTokenIdentifier,
        content: Option<Vec<u8>>,
    ) {
        let token_index = super::utils::parse_token_index_with_self_canister(&token_id);
        if let Ok(index) = token_index {
            let index = index as usize;
            self.set_nft_content(index, content);
        }
    }
    fn set_nft_metadata_by_token_identifier(
        &mut self,
        token_id: ExtTokenIdentifier,
        no: usize,
        media: Option<MediaData>,
    ) {
        let token_index = super::utils::parse_token_index_with_self_canister(&token_id);
        if let Ok(index) = token_index {
            let index = index as usize;
            self.set_nft_metadata(index, no as usize, media);
        }
    }
    fn set_nft_thumbnail_by_token_identifier(
        &mut self,
        token_id: ExtTokenIdentifier,
        thumbnail: Option<MediaData>,
    ) {
        let token_index = super::utils::parse_token_index_with_self_canister(&token_id);
        if let Ok(index) = token_index {
            let index = index as usize;
            self.set_nft_thumbnail(index, thumbnail);
        }
    }
    fn set_nft_ownable_by_token_identifier(
        &mut self,
        token_id: ExtTokenIdentifier,
        ownable: NFTOwnable,
    ) {
        let token_index = super::utils::parse_token_index_with_self_canister(&token_id);
        if let Ok(index) = token_index {
            let index = index as usize;
            self.set_nft_ownable(index, ownable);
        }
    }

    fn get_nft_rarity_by_token_identifier(&self, token_id: ExtTokenIdentifier) -> String {
        let token_index = super::utils::parse_token_index_with_self_canister(&token_id);
        if let Ok(index) = token_index {
            let index = index as usize;
            return self.get_nft_rarity(index);
        }
        ic_cdk::trap("Wrong token_id for nft: {}", token_id); // ! 中止执行
    }
    fn get_nft_metadata_by_token_identifier(
        &self,
        token_id: ExtTokenIdentifier,
        no: usize,
    ) -> Option<MediaData> {
        let token_index = super::utils::parse_token_index_with_self_canister(&token_id);
        if let Ok(index) = token_index {
            let index = index as usize;
            return self.get_nft_metadata(index, no);
        }
        ic_cdk::trap("Wrong token_id for nft: {}", token_id); // ! 中止执行
    }
}