diplomat 0.10.0

The diplomat FFI generation macro
Documentation
---
source: macro/src/lib.rs
expression: "rustfmt_code(&gen_bridge(parse_quote! {\n                            mod ffi\n                            {\n                                #[diplomat::opaque] struct Foo<'a>(&'a str);\n                                #[diplomat::opaque] struct Bar<'b, 'a: 'b>(&'b Foo<'a>);\n                                struct Baz<'x, 'y> { foo: &'y Foo<'x>, } impl<'a> Foo<'a>\n                                {\n                                    pub fn new(x: &'a str) -> Box<Foo<'a>> { unimplemented!() }\n                                    pub fn get_bar<'b>(&'b self) -> Box<Bar<'b, 'a>>\n                                    { unimplemented!() } pub fn get_baz<'b>(&'b self) -> Baz<'b,\n                                    'a> { Bax { foo: self } }\n                                }\n                            }\n                        }).to_token_stream().to_string())"
---
mod ffi {
    struct Foo<'a>(&'a str);
    struct Bar<'b, 'a: 'b>(&'b Foo<'a>);
    #[repr(C)]
    struct Baz<'x, 'y> {
        foo: &'y Foo<'x>,
    }
    impl<'a> Foo<'a> {
        pub fn new(x: &'a str) -> Box<Foo<'a>> {
            unimplemented!()
        }
        pub fn get_bar<'b>(&'b self) -> Box<Bar<'b, 'a>> {
            unimplemented!()
        }
        pub fn get_baz<'b>(&'b self) -> Baz<'b, 'a> {
            Bax { foo: self }
        }
    }
    use core::ffi::c_void;
    use diplomat_runtime::*;
    #[no_mangle]
    extern "C" fn Bar_destroy<'b, 'a: 'b>(this: Box<Bar<'b, 'a>>) {}
    #[no_mangle]
    extern "C" fn Foo_new<'a>(x: diplomat_runtime::DiplomatUtf8StrSlice<'a>) -> Box<Foo<'a>> {
        let x = x.into();
        Foo::new(x)
    }
    #[no_mangle]
    extern "C" fn Foo_get_bar<'a: 'b, 'b>(this: &'b Foo<'a>) -> Box<Bar<'b, 'a>> {
        this.get_bar()
    }
    #[no_mangle]
    extern "C" fn Foo_get_baz<'a: 'b, 'b>(this: &'b Foo<'a>) -> Baz<'b, 'a> {
        this.get_baz()
    }
    #[no_mangle]
    extern "C" fn Foo_destroy<'a>(this: Box<Foo<'a>>) {}
}