#![allow(
dead_code,
irrefutable_let_patterns,
unused_variables,
unused_imports,
unused
)]
use crate::attributes::*;
use derive_builder::Builder;
use proc_macro2::{Ident, Span, TokenStream};
use quote::{quote, quote_spanned, ToTokens};
use syn::parse::{Parse, ParseStream};
use syn::spanned::Spanned;
use syn::{
braced, parse_macro_input, parse_quote, token, Attribute, Data, DataEnum, DataStruct,
DeriveInput, Expr, Fields, GenericParam, Generics, Index, ItemEnum, ItemStruct, Meta, Token,
Variant,
};
#[derive(Debug, Clone, Builder, PartialEq, Eq)]
pub(crate) struct DeriveContext {
pub ident: syn::Ident,
pub struct_enum_token: syn::Ident,
pub rule_ident: syn::Path,
}
pub(crate) trait StructContext {
fn from_syn_item_struct(item_struct: ItemStruct) -> Self;
fn to_impl(&self) -> TokenStream;
}
pub(crate) trait EnumContext {
fn from_syn_item_enum(item_enum: ItemEnum) -> Self;
fn to_impl(&self) -> TokenStream;
}
pub(crate) trait StructFieldContext {
fn from_syn_field(field: &syn::Field) -> Self;
}
pub(crate) trait EnumVariantContext {
fn from_syn_variant(variant: &syn::Variant) -> Self;
}
pub(crate) mod direct_struct;
pub(crate) use direct_struct::*;
pub(crate) mod sequential_struct;
pub(crate) use sequential_struct::*;
pub(crate) mod conditional_enum;
pub(crate) use conditional_enum::*;