use getset::{CloneGetters, Getters};
use proc_macro2::{Ident, TokenStream};
use quote::ToTokens;
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,
#[getset(skip)]
name_ident: Ident,
variants: Vec<BitflagVariant>,
arguments: BitflagArguments,
}
impl Bitflag {
pub fn new(
user_attributes_tokens: Vec<TokenStream>,
spanned_data_type_token: SpannedDataTypeToken,
visibility: Visibility,
name_ident: Ident,
variants: Vec<BitflagVariant>,
arguments: BitflagArguments,
) -> Self {
let _name = name_ident.to_string();
Self {
user_attributes_tokens,
spanned_data_type_token,
visibility,
name_ident,
variants,
arguments,
}
}
pub fn name_tokens(&self) -> TokenStream {
self.name_ident.to_token_stream()
}
}
#[derive(Getters, CloneGetters, Clone)]
#[getset(get_clone = "pub")]
pub struct BitflagVariant {
user_attributes_tokens: Vec<TokenStream>,
#[getset(skip)]
name_ident: Ident,
value: ConstExpr,
base: bool,
default: bool,
}
impl BitflagVariant {
pub fn new(
user_attributes_tokens: Vec<TokenStream>,
name_ident: Ident,
value: ConstExpr,
base: bool,
default: bool,
) -> Self {
Self {
user_attributes_tokens,
name_ident,
value,
base,
default,
}
}
pub fn name_tokens(&self) -> TokenStream {
self.name_ident.to_token_stream()
}
}