use proc_macro2::TokenStream;
use quote::{format_ident, quote};
use syn::{Expr, Ident};
use super::parse::InfraFields;
#[derive(Debug)]
pub(crate) struct LightMintField {
pub field_ident: Ident,
pub mint_signer: Expr,
pub authority: Expr,
pub decimals: Expr,
pub freeze_authority: Option<Ident>,
pub mint_seeds: Expr,
pub mint_bump: Option<Expr>,
pub authority_seeds: Option<Expr>,
pub authority_bump: Option<Expr>,
pub name: Option<Expr>,
pub symbol: Option<Expr>,
pub uri: Option<Expr>,
pub update_authority: Option<Ident>,
pub additional_metadata: Option<Expr>,
}
fn resolve_field_name(field: &Option<syn::Ident>, default: &str) -> TokenStream {
field.as_ref().map(|f| quote! { #f }).unwrap_or_else(|| {
let ident = format_ident!("{}", default);
quote! { #ident }
})
}
pub(super) struct InfraRefs {
pub fee_payer: TokenStream,
pub compression_config: TokenStream,
pub pda_rent_sponsor: TokenStream,
pub light_token_config: TokenStream,
pub light_token_rent_sponsor: TokenStream,
pub light_token_cpi_authority: TokenStream,
}
impl InfraRefs {
pub fn from_parsed(infra: &InfraFields) -> Self {
Self {
fee_payer: resolve_field_name(&infra.fee_payer, "fee_payer"),
compression_config: resolve_field_name(&infra.compression_config, "compression_config"),
pda_rent_sponsor: resolve_field_name(&infra.pda_rent_sponsor, "pda_rent_sponsor"),
light_token_config: resolve_field_name(&infra.light_token_config, "light_token_config"),
light_token_rent_sponsor: resolve_field_name(
&infra.light_token_rent_sponsor,
"light_token_rent_sponsor",
),
light_token_cpi_authority: resolve_field_name(
&infra.light_token_cpi_authority,
"light_token_cpi_authority",
),
}
}
}