ffi_convert_derive/
lib.rs

1//! This crate provides ffi_convert derive macros for CReprOf, AsRust and CDrop traits.
2
3extern 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}