use crate::prelude::ResourceManager;
use radix_engine_interface::blueprints::resource::*;
use radix_engine_interface::data::scrypto::model::*;
use radix_engine_interface::types::NonFungibleData;
use radix_engine_interface::types::*;
use radix_engine_interface::*;
use sbor::rust::marker::PhantomData;
#[derive(Debug)]
pub struct NonFungible<T: NonFungibleData> {
non_fungible_global_id: NonFungibleGlobalId,
data: PhantomData<T>,
}
impl<T: NonFungibleData> From<NonFungibleGlobalId> for NonFungible<T> {
fn from(non_fungible_global_id: NonFungibleGlobalId) -> Self {
Self {
non_fungible_global_id,
data: PhantomData,
}
}
}
impl<T: NonFungibleData> NonFungible<T> {
pub fn resource_address(&self) -> ResourceAddress {
self.non_fungible_global_id.resource_address().clone()
}
pub fn global_id(&self) -> &NonFungibleGlobalId {
&self.non_fungible_global_id
}
pub fn local_id(&self) -> &NonFungibleLocalId {
self.non_fungible_global_id.local_id()
}
pub fn data(&self) -> T {
let manager: ResourceManager = self.resource_address().into();
manager.get_non_fungible_data(self.local_id())
}
}