use getset::{CloneGetters, Getters};
use proc_macro2::TokenStream;
use quote::{ToTokens, format_ident};
use crate::parsing::bitflags::bitflag_arguments::BitflagArguments;
use crate::parsing::common::const_expr::ConstExpr;
use crate::parsing::common::spanned_data_type::SpannedDataTypeToken;
use crate::parsing::common::visibility::Visibility;
#[derive(Getters, CloneGetters)]
#[getset(get_clone = "pub")]
pub struct Bitflag {
user_attributes_tokens: Vec<TokenStream>,
spanned_data_type_token: SpannedDataTypeToken,
visibility: Visibility,
name: String,
variants: Vec<BitflagVariant>,
arguments: BitflagArguments,
}
impl Bitflag {
pub const fn new(
user_attributes_tokens: Vec<TokenStream>,
spanned_data_type_token: SpannedDataTypeToken,
visibility: Visibility,
name: String,
variants: Vec<BitflagVariant>,
arguments: BitflagArguments,
) -> Self {
Self {
user_attributes_tokens,
spanned_data_type_token,
visibility,
name,
variants,
arguments,
}
}
pub fn name_tokens(&self) -> TokenStream {
format_ident!("{}", self.name).to_token_stream()
}
}
#[derive(Getters, CloneGetters, Clone)]
#[getset(get_clone = "pub")]
pub struct BitflagVariant {
user_attributes_tokens: Vec<TokenStream>,
name: String,
value: ConstExpr,
base: bool,
default: bool,
}
impl BitflagVariant {
pub const fn new(
user_attributes_tokens: Vec<TokenStream>,
name: String,
value: ConstExpr,
base: bool,
default: bool,
) -> Self {
Self {
user_attributes_tokens,
name,
value,
base,
default,
}
}
pub fn name_tokens(&self) -> TokenStream {
format_ident!("{}", self.name).to_token_stream()
}
}