1use anyhow::{anyhow, Result};
2use mpl_token_metadata::types::{Creator, DataV2};
3use solana_sdk::pubkey::Pubkey;
4use std::str::FromStr;
5
6use crate::data::{NftCreator, NftData};
7
8pub fn convert_local_to_remote_data(local: NftData) -> Result<DataV2> {
9 let creators = local
10 .creators
11 .ok_or_else(|| anyhow!("No creators specified in json file!"))?
12 .iter()
13 .map(convert_creator)
14 .collect::<Result<Vec<Creator>>>()?;
15
16 let data = DataV2 {
17 name: local.name,
18 symbol: local.symbol,
19 uri: local.uri,
20 seller_fee_basis_points: local.seller_fee_basis_points,
21 creators: Some(creators),
22 collection: None,
23 uses: None,
24 };
25 Ok(data)
26}
27
28fn convert_creator(c: &NftCreator) -> Result<Creator> {
29 Ok(Creator {
30 address: Pubkey::from_str(&c.address)?,
31 verified: c.verified,
32 share: c.share,
33 })
34}