1use crate::error::KoraError;
2use solana_sdk::pubkey::Pubkey;
3use std::str::FromStr;
4
5mod interface;
6mod token;
7mod token22;
8
9#[cfg(test)]
10mod tests;
11
12pub use interface::{TokenInterface, TokenState};
13pub use token::{TokenAccount, TokenProgram};
14pub use token22::{Token2022Account, Token2022Program};
15
16#[derive(Debug, Clone, Copy, PartialEq)]
17pub enum TokenType {
18 Spl,
19 Token2022,
20}
21
22impl TokenType {
23 pub fn program_id(&self, token_interface: &impl TokenInterface) -> Pubkey {
24 match self {
25 TokenType::Spl => token_interface.program_id(),
26 TokenType::Token2022 => token_interface.program_id(),
27 }
28 }
29}
30
31pub fn check_valid_tokens(tokens: &[String]) -> Result<Vec<Pubkey>, KoraError> {
32 tokens
33 .iter()
34 .map(|token| {
35 Pubkey::from_str(token).map_err(|_| {
36 KoraError::ValidationError(format!("Invalid token address: {}", token))
37 })
38 })
39 .collect()
40}