radix_native_sdk/modules/metadata/
metadata.rs1use 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}