use proc_macro::TokenStream;
use syn::{parse_macro_input, DeriveInput, Data, Error};
#[proc_macro_attribute]
pub fn flink_input(_attr: TokenStream, item: TokenStream) -> TokenStream {
let item_clone = item.clone();
let input = parse_macro_input!(item_clone as DeriveInput);
match input.data {
Data::Struct(_) => {
item
},
_ => {
Error::new_spanned(
proc_macro2::TokenStream::from(item),
"#[flink_input] can only be used on structs"
)
.to_compile_error()
.into()
}
}
}
#[proc_macro_attribute]
pub fn flink_output(_attr: TokenStream, item: TokenStream) -> TokenStream {
let item_clone = item.clone();
let input = parse_macro_input!(item_clone as DeriveInput);
match input.data {
Data::Struct(_) => {
item
},
_ => {
Error::new_spanned(
proc_macro2::TokenStream::from(item),
"#[flink_output] can only be used on structs"
)
.to_compile_error()
.into()
}
}
}
#[proc_macro_derive(FlinkTypes, attributes(flink_type))]
pub fn flink_types_derive(input: TokenStream) -> TokenStream {
let _input = parse_macro_input!(input as DeriveInput);
TokenStream::new()
}