bucky_raw_codec_derive/
lib.rs1extern crate proc_macro;
2extern crate proc_macro2;
3
4#[macro_use]
5extern crate quote;
6
7use quote::*;
8use proc_macro::TokenStream;
9use crate::protobuf_codec::*;
10
11mod internals;
12#[macro_use]
13mod bound;
14#[macro_use]
15mod fragment;
16
17mod de;
18mod dummy;
19mod pretend;
20mod en;
21mod try_;
22mod protobuf_codec;
23
24#[proc_macro_derive(RawEncode, attributes(bucky))]
25pub fn derive_raw_encode_fn(input: TokenStream) -> TokenStream {
26 let input = syn::parse_macro_input!(input as syn::DeriveInput);
27 en::expand_derive_raw_encode(&input)
28 .unwrap_or_else(to_compile_errors)
29 .into()
30}
31
32#[proc_macro_derive(RawDecode, attributes(bucky))]
33pub fn derive_raw_decode_fn(input: TokenStream) -> TokenStream {
34 let input = syn::parse_macro_input!(input as syn::DeriveInput);
35 de::expand_derive_raw_decode(&input)
36 .unwrap_or_else(to_compile_errors)
37 .into()
38}
39
40#[proc_macro_derive(ProtobufTransform, attributes(bucky_protobuf_type))]
41pub fn derive_protobuf_try_from_fn(input: TokenStream) -> TokenStream {
42 let input = syn::parse_macro_input!(input as syn::DeriveInput);
43 derive_protobuf_try_from_fn_impl(input).unwrap_or_else(|err| {
44 err.to_compile_error().into()
45 })
46}
47
48#[proc_macro_derive(ProtobufTransformType, attributes(bucky_protobuf_type))]
49pub fn derive_protobuf_type_fn(input: TokenStream) -> TokenStream {
50 let input = syn::parse_macro_input!(input as syn::DeriveInput);
51 derive_protobuf_transform_type_fn_impl(input).unwrap_or_else(|err| {
52 err.to_compile_error().into()
53 })
54}
55
56#[proc_macro_derive(ProtobufEncode, attributes(bucky_protobuf_type))]
57pub fn derive_proto_encode_fn(input: TokenStream) -> TokenStream {
58 let input = syn::parse_macro_input!(input as syn::DeriveInput);
59 derive_proto_encode_fn_impl(input).unwrap_or_else(|err| {
60 err.to_compile_error().into()
61 })
62}
63
64#[proc_macro_derive(ProtobufDecode, attributes(bucky_protobuf_type))]
65pub fn derive_proto_decode_fn(input: TokenStream) -> TokenStream {
66 let input = syn::parse_macro_input!(input as syn::DeriveInput);
67 derive_proto_decode_fn_impl(input).unwrap_or_else(|err| {
68 err.to_compile_error().into()
69 })
70}
71
72#[proc_macro_derive(ProtobufEmptyEncode)]
73pub fn derive_proto_encode_empty_fn(input: TokenStream) -> TokenStream {
74 let input = syn::parse_macro_input!(input as syn::DeriveInput);
75 derive_proto_encode_empty_fn_impl(input).unwrap_or_else(|err| {
76 err.to_compile_error().into()
77 })
78}
79
80#[proc_macro_derive(ProtobufEmptyDecode)]
81pub fn derive_proto_decode_empty_fn(input: TokenStream) -> TokenStream {
82 let input = syn::parse_macro_input!(input as syn::DeriveInput);
83 derive_proto_decode_empty_fn_impl(input).unwrap_or_else(|err| {
84 err.to_compile_error().into()
85 })
86}
87
88fn to_compile_errors(errors: Vec<syn::Error>) -> proc_macro2::TokenStream {
89 let compile_errors = errors.iter().map(syn::Error::to_compile_error);
90 quote!(#(#compile_errors)*)
91}
92