open_edition_factory/
types.rs1use cosmwasm_schema::cw_serde;
2use cosmwasm_std::ensure;
3
4use sg_metadata::Metadata;
5
6use crate::ContractError;
7
8#[cw_serde]
11pub enum NftMetadataType {
12 OnChainMetadata,
13 OffChainMetadata,
14}
15
16#[cw_serde]
17pub struct NftData {
18 pub nft_data_type: NftMetadataType,
19 pub extension: Option<Metadata>,
20 pub token_uri: Option<String>,
21}
22
23impl NftData {
24 pub fn validate(nft_data: NftData) -> Result<Self, ContractError> {
25 ensure!(
26 nft_data.valid_nft_data(),
27 ContractError::InvalidNftDataProvided {}
28 );
29
30 Ok(NftData {
33 nft_data_type: nft_data.nft_data_type,
34 extension: nft_data.extension,
35 token_uri: nft_data.token_uri,
36 })
37 }
38
39 pub fn valid_nft_data(&self) -> bool {
40 if self.token_uri.is_some() && self.extension.is_some() {
41 return false;
42 }
43 if self.token_uri.is_some() && self.nft_data_type == NftMetadataType::OffChainMetadata {
44 true
45 } else {
46 self.extension.is_some() && self.nft_data_type == NftMetadataType::OnChainMetadata
47 }
48 }
49}