sugar_cli/validate/
parser.rs

1use std::str::FromStr;
2
3use anchor_lang::prelude::Pubkey;
4pub use mpl_token_metadata::state::{MAX_NAME_LENGTH, MAX_SYMBOL_LENGTH, MAX_URI_LENGTH};
5
6use crate::{
7    common::*,
8    validate::{errors::ValidateParserError, Creator},
9};
10
11pub fn check_name(name: &str) -> Result<(), ValidateParserError> {
12    if name.len() > MAX_NAME_LENGTH {
13        return Err(ValidateParserError::NameTooLong);
14    }
15    Ok(())
16}
17
18pub fn check_symbol(symbol: &str) -> Result<(), ValidateParserError> {
19    if symbol.len() > MAX_SYMBOL_LENGTH {
20        return Err(ValidateParserError::SymbolTooLong);
21    }
22    Ok(())
23}
24
25pub fn check_url(url: &str) -> Result<(), ValidateParserError> {
26    if url.len() > MAX_URI_LENGTH {
27        return Err(ValidateParserError::UrlTooLong);
28    }
29    Ok(())
30}
31
32pub fn check_seller_fee_basis_points(
33    seller_fee_basis_points: u16,
34) -> Result<(), ValidateParserError> {
35    if seller_fee_basis_points > 10000 {
36        return Err(ValidateParserError::InvalidSellerFeeBasisPoints(
37            seller_fee_basis_points,
38        ));
39    }
40    Ok(())
41}
42
43pub fn check_creators_shares(creators: &[Creator]) -> Result<(), ValidateParserError> {
44    let mut shares = 0;
45    for creator in creators {
46        shares += creator.share;
47    }
48
49    if shares != 100 {
50        return Err(ValidateParserError::InvalidCreatorShare);
51    }
52    Ok(())
53}
54
55pub fn check_creators_addresses(creators: &[Creator]) -> Result<(), ValidateParserError> {
56    for creator in creators {
57        Pubkey::from_str(&creator.address)
58            .map_err(|_| ValidateParserError::InvalidCreatorAddress(creator.address.clone()))?;
59    }
60
61    Ok(())
62}
63
64pub fn check_category(category: &str) -> Result<(), ValidateParserError> {
65    if !VALID_CATEGORIES.contains(&category) {
66        return Err(ValidateParserError::InvalidCategory(
67            category.to_string(),
68            format!("{:?}", VALID_CATEGORIES),
69        ));
70    }
71
72    Ok(())
73}