ffi_convert_derive/
lib.rs1extern crate proc_macro;
4
5mod asrust;
6mod cdrop;
7mod creprof;
8mod rawpointerconverter;
9mod utils;
10
11use asrust::impl_asrust_macro;
12use cdrop::impl_cdrop_macro;
13use creprof::impl_creprof_macro;
14use proc_macro::TokenStream;
15use rawpointerconverter::impl_rawpointerconverter_macro;
16
17#[proc_macro_derive(
18 CReprOf,
19 attributes(target_type, nullable, c_repr_of_convert, target_name)
20)]
21pub fn creprof_derive(token_stream: TokenStream) -> TokenStream {
22 let ast = syn::parse(token_stream).unwrap();
23 impl_creprof_macro(&ast)
24}
25
26#[proc_macro_derive(
27 AsRust,
28 attributes(
29 target_type,
30 nullable,
31 as_rust_extra_field,
32 as_rust_ignore,
33 target_name
34 )
35)]
36pub fn asrust_derive(token_stream: TokenStream) -> TokenStream {
37 let ast = syn::parse(token_stream).unwrap();
38 impl_asrust_macro(&ast)
39}
40
41#[proc_macro_derive(CDrop, attributes(no_drop_impl, nullable))]
42pub fn cdrop_derive(token_stream: TokenStream) -> TokenStream {
43 let ast = syn::parse(token_stream).unwrap();
44 impl_cdrop_macro(&ast)
45}
46
47#[proc_macro_derive(RawPointerConverter)]
48pub fn rawpointerconverter_derive(token_stream: TokenStream) -> TokenStream {
49 let ast = syn::parse(token_stream).unwrap();
50 impl_rawpointerconverter_macro(&ast)
51}