Skip to main content

bucky_raw_codec_derive/
lib.rs

1extern 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//
93// #[cfg(test)]
94// mod test {
95//     use proc_macro::TokenStream;
96//     use std::str::FromStr;
97//
98//     #[test]
99//     fn test() {
100//         let input = TokenStream::from_str(r#"struct Test {
101//         t: u32,
102//     }"#);
103//
104//         // derive_raw_enccode_fn(input);
105//     }
106//
107// }