use crate::extract_variants_with_types;
use proc_macro2::TokenStream;
use quote::quote;
use syn::{Data, DataEnum, DeriveInput, Ident};
pub fn dispatch_struct_enum_operate_mode_gate(input: DeriveInput) -> TokenStream {
let ident = input.ident;
match input.data {
Data::Struct(_ds) => operate_mode_gate_struct(ident),
Data::Enum(de) => operate_mode_gate_enum(de, ident),
_ => panic!("OperateModeGate can only be derived on structs and enums"),
}
}
fn operate_mode_gate_enum(de: DataEnum, ident: Ident) -> TokenStream {
let _variants_with_type = extract_variants_with_types(de).into_iter();
quote! {
#[automatically_derived]
impl OperateModeGate for #ident{
}
}
}
fn operate_mode_gate_struct(ident: Ident) -> TokenStream {
quote! {
#[automatically_derived]
impl OperateModeGate for #ident{
}
}
}
pub fn dispatch_struct_enum_single_mode_gate(input: DeriveInput) -> TokenStream {
let ident = input.ident;
match input.data {
Data::Struct(_ds) => single_mode_gate_struct(ident),
Data::Enum(de) => single_mode_gate_enum(de, ident),
_ => panic!("OperateSingleMode can only be derived on structs and enums"),
}
}
fn single_mode_gate_enum(de: DataEnum, ident: Ident) -> TokenStream {
let _variants_with_type = extract_variants_with_types(de).into_iter();
quote! {
#[automatically_derived]
impl OperateSingleModeGate for #ident{
}
}
}
fn single_mode_gate_struct(ident: Ident) -> TokenStream {
quote! {
#[automatically_derived]
impl OperateSingleModeGate for #ident{
}
}
}
pub fn dispatch_struct_enum_two_mode_gate(input: DeriveInput) -> TokenStream {
let ident = input.ident;
match input.data {
Data::Struct(_ds) => two_mode_gate_struct(ident),
Data::Enum(de) => two_mode_gate_enum(de, ident),
_ => panic!("OperateTwoModeGate can only be derived on structs and enums"),
}
}
fn two_mode_gate_enum(de: DataEnum, ident: Ident) -> TokenStream {
let _variants_with_type = extract_variants_with_types(de).into_iter();
quote! {
#[automatically_derived]
impl OperateTwoModeGate for #ident{
}
}
}
fn two_mode_gate_struct(ident: Ident) -> TokenStream {
quote! {
#[automatically_derived]
impl OperateTwoModeGate for #ident{
}
}
}