odra_modules/
cep96.rs

1#![allow(unused_variables, missing_docs)]
2
3mod storage;
4
5use odra::prelude::*;
6
7use crate::cep96::storage::{
8    Cep96DescriptionStorage, Cep96IconUriStorage, Cep96NameStorage, Cep96ProjectUriStorage
9};
10pub trait Cep96ContractMetadata {
11    /// Contract's human-readable name.
12    fn contract_name(&self) -> Option<String>;
13
14    /// Brief description of the contract.
15    fn contract_description(&self) -> Option<String>;
16
17    /// URI pointing to the contract's icon image.
18    fn contract_icon_uri(&self) -> Option<String>;
19
20    /// URI pointing to the project's website or documentation.
21    fn contract_project_uri(&self) -> Option<String>;
22}
23
24#[odra::module]
25pub struct Cep96 {
26    pub contract_name: SubModule<Cep96NameStorage>,
27    pub contract_description: SubModule<Cep96DescriptionStorage>,
28    pub contract_icon_uri: SubModule<Cep96IconUriStorage>,
29    pub contract_project_uri: SubModule<Cep96ProjectUriStorage>
30}
31
32#[odra::module]
33impl Cep96ContractMetadata for Cep96 {
34    fn contract_name(&self) -> Option<String> {
35        self.contract_name.get()
36    }
37
38    fn contract_description(&self) -> Option<String> {
39        self.contract_description.get()
40    }
41
42    fn contract_icon_uri(&self) -> Option<String> {
43        self.contract_icon_uri.get()
44    }
45
46    fn contract_project_uri(&self) -> Option<String> {
47        self.contract_project_uri.get()
48    }
49}
50
51impl Cep96 {
52    pub fn init(
53        &self,
54        name: Option<String>,
55        description: Option<String>,
56        icon_uri: Option<String>,
57        project_uri: Option<String>
58    ) {
59        if let Some(name) = name {
60            self.contract_name.set(name);
61        }
62        if let Some(description) = description {
63            self.contract_description.set(description);
64        }
65        if let Some(icon_uri) = icon_uri {
66            self.contract_icon_uri.set(icon_uri);
67        }
68        if let Some(project_uri) = project_uri {
69            self.contract_project_uri.set(project_uri);
70        }
71    }
72}