Skip to main content

radix_native_sdk/modules/metadata/
metadata.rs

1use radix_common::constants::METADATA_MODULE_PACKAGE;
2use radix_common::data::scrypto::model::Own;
3use radix_common::data::scrypto::*;
4use radix_engine_interface::api::*;
5use radix_engine_interface::object_modules::metadata::{
6    MetadataCreateInput, MetadataCreateWithDataInput, MetadataInit, MetadataSetInput, MetadataVal,
7    METADATA_BLUEPRINT, METADATA_CREATE_IDENT, METADATA_CREATE_WITH_DATA_IDENT, METADATA_SET_IDENT,
8};
9use sbor::rust::prelude::*;
10
11pub struct Metadata(pub Own);
12
13impl Metadata {
14    pub fn create<Y: SystemApi<E>, E: SystemApiError>(api: &mut Y) -> Result<Own, E> {
15        let rtn = api.call_function(
16            METADATA_MODULE_PACKAGE,
17            METADATA_BLUEPRINT,
18            METADATA_CREATE_IDENT,
19            scrypto_encode(&MetadataCreateInput {}).unwrap(),
20        )?;
21        let metadata: Own = scrypto_decode(&rtn).unwrap();
22
23        Ok(metadata)
24    }
25
26    pub fn create_with_data<Y: SystemApi<E>, E: SystemApiError>(
27        data: MetadataInit,
28        api: &mut Y,
29    ) -> Result<Own, E> {
30        let rtn = api.call_function(
31            METADATA_MODULE_PACKAGE,
32            METADATA_BLUEPRINT,
33            METADATA_CREATE_WITH_DATA_IDENT,
34            scrypto_encode(&MetadataCreateWithDataInput { data }).unwrap(),
35        )?;
36        let metadata: Own = scrypto_decode(&rtn).unwrap();
37
38        Ok(metadata)
39    }
40
41    pub fn new<Y: SystemApi<E>, E: SystemApiError>(api: &mut Y) -> Result<Self, E> {
42        Self::create(api).map(Self)
43    }
44
45    pub fn set<Y: SystemApi<E>, E: SystemApiError, S: AsRef<str>, V: MetadataVal>(
46        &mut self,
47        api: &mut Y,
48        key: S,
49        value: V,
50    ) -> Result<(), E> {
51        api.call_method(
52            self.0.as_node_id(),
53            METADATA_SET_IDENT,
54            scrypto_encode(&MetadataSetInput {
55                key: key.as_ref().to_owned(),
56                value: value.to_metadata_value(),
57            })
58            .unwrap(),
59        )?;
60        Ok(())
61    }
62}