#![allow(clippy::manual_unwrap_or_default)]
mod config;
mod into_proto_buf;
mod pocket_definition;
mod proto_buf_ext;
mod remote_derive;
mod try_from_proto_buf;
use proc_macro::TokenStream;
use quote::quote;
use syn::{parse_macro_input, DeriveInput, Item};
#[proc_macro_derive(IntoProtoBuf, attributes(proto))]
pub fn into_proto_buf(input: TokenStream) -> TokenStream {
let input = parse_macro_input!(input as DeriveInput);
match into_proto_buf::main(input) {
Err(e) => e.into_compile_error().into(),
Ok(v) => quote!(#v).into(),
}
}
#[proc_macro]
pub fn into_proto_buf_remote_derive(input: TokenStream) -> TokenStream {
let input = parse_macro_input!(input as DeriveInput);
match into_proto_buf::main(input) {
Err(e) => e.into_compile_error().into(),
Ok(v) => quote!(#v).into(),
}
}
#[proc_macro_derive(TryFromProtoBuf, attributes(proto))]
pub fn try_from_proto_buf(input: TokenStream) -> TokenStream {
let input = parse_macro_input!(input as DeriveInput);
match try_from_proto_buf::main(input) {
Err(e) => e.into_compile_error().into(),
Ok(v) => quote!(#v).into(),
}
}
#[proc_macro]
pub fn try_from_proto_buf_remote_derive(input: TokenStream) -> TokenStream {
let input = parse_macro_input!(input as DeriveInput);
match try_from_proto_buf::main(input) {
Err(e) => e.into_compile_error().into(),
Ok(v) => quote!(#v).into(),
}
}
#[proc_macro_derive(Config, attributes(config))]
pub fn config(input: TokenStream) -> TokenStream {
let input = parse_macro_input!(input as DeriveInput);
match config::main(input) {
Err(e) => e.into_compile_error().into(),
Ok(v) => quote!(#v).into(),
}
}
#[proc_macro_attribute]
pub fn pocket_definition(attrs: TokenStream, input: TokenStream) -> TokenStream {
let input = parse_macro_input!(input as Item);
match pocket_definition::main(&input, attrs.into()) {
Err(e) => e.into_compile_error().into(),
Ok(v) => quote! {
#input
#v
}
.into(),
}
}
#[doc(hidden)]
#[proc_macro]
pub fn remote_derive_inner(input: TokenStream) -> TokenStream {
let input = parse_macro_input!(input as remote_derive::InnerArguments);
match remote_derive::inner_main(input) {
Err(e) => e.into_compile_error().into(),
Ok(v) => quote!(#v).into(),
}
}
#[proc_macro]
pub fn remote_derive(input: TokenStream) -> TokenStream {
let input = parse_macro_input!(input as remote_derive::Arguments);
match remote_derive::main(input) {
Err(e) => e.into_compile_error().into(),
Ok(v) => quote!(#(#v)*).into(),
}
}
#[proc_macro_derive(ProtoBufExt, attributes(prost))]
pub fn proto_buf_ext(input: TokenStream) -> TokenStream {
let input = parse_macro_input!(input as DeriveInput);
match proto_buf_ext::main(input) {
Err(e) => e.into_compile_error().into(),
Ok(v) => quote!(#(#v)*).into(),
}
}