odra_modules/erc721/extensions/
erc721_metadata.rs

1//! Erc721 metadata.
2
3use crate::erc721::extensions::erc721_metadata::errors::Error;
4use odra::prelude::*;
5
6/// The ERC721 Metadata interface as defined in the standard.
7pub trait Erc721Metadata {
8    /// Returns the token collection name.
9    fn name(&self) -> String;
10    /// Returns the token collection symbol.
11    fn symbol(&self) -> String;
12    /// Returns the base URI for the token collection.
13    fn base_uri(&self) -> String;
14}
15
16/// The ERC721 Metadata extension.
17#[odra::module(errors = Error)]
18pub struct Erc721MetadataExtension {
19    name: Var<String>,
20    symbol: Var<String>,
21    base_uri: Var<String>
22}
23
24impl Erc721Metadata for Erc721MetadataExtension {
25    fn name(&self) -> String {
26        self.name
27            .get()
28            .unwrap_or_revert_with(&self.env(), Error::NameNotSet)
29    }
30
31    fn symbol(&self) -> String {
32        self.symbol
33            .get()
34            .unwrap_or_revert_with(&self.env(), Error::SymbolNotSet)
35    }
36
37    fn base_uri(&self) -> String {
38        self.base_uri
39            .get()
40            .unwrap_or_revert_with(&self.env(), Error::BaseUriNotSet)
41    }
42}
43
44impl Erc721MetadataExtension {
45    /// Initializes the ERC721 metadata extension.
46    pub fn init(&mut self, name: String, symbol: String, base_uri: String) {
47        self.name.set(name);
48        self.symbol.set(symbol);
49        self.base_uri.set(base_uri);
50    }
51}
52
53/// Erc721Metadata-related errors.
54pub mod errors {
55    use odra::prelude::*;
56
57    /// Possible errors in the context of Erc721 metadata.
58    #[odra::odra_error]
59    pub enum Error {
60        /// The name is not set.
61        NameNotSet = 31_000,
62        /// The symbol is not set.
63        SymbolNotSet = 31_001,
64        /// The base URI is not set.
65        BaseUriNotSet = 31_002
66    }
67}