--- source: macro/src/lib.rs expression: "pretty_print_code(gen_bridge(parse_quote!\n{\n mod ffi\n {\n use\n diplomat_runtime::{DiplomatStr, DiplomatStr16, DiplomatByte,\n DiplomatOwnedSlice, DiplomatOwnedStr16Slice,\n DiplomatOwnedStrSlice, DiplomatOwnedUTF8StrSlice, DiplomatSlice,\n DiplomatSliceMut, DiplomatStr16Slice, DiplomatStrSlice,\n DiplomatUtf8StrSlice}; struct Foo<'a>\n {\n a: DiplomatSlice<'a, u8>, b: DiplomatSlice<'a, u16>, c:\n DiplomatUtf8StrSlice<'a>, d: DiplomatStrSlice<'a>, e:\n DiplomatStr16Slice<'a>, f: DiplomatSlice<'a, DiplomatByte>,\n } impl Foo\n {\n pub fn\n make(a: &'a [u8], b: &'a [u16], c: &'a str, d: &'a DiplomatStr, e:\n &'a DiplomatStr16, f: &'a [DiplomatByte]) -> Self\n { Foo { a, b, c, d, e, f, } } pub fn\n make_runtime_types(a: DiplomatSlice<'a, u8>, b: DiplomatSlice<'a,\n u16>, c: DiplomatUtf8StrSlice<'a>, d: DiplomatStrSlice<'a>, e:\n DiplomatStr16Slice<'a>, f: DiplomatSlice<'a, DiplomatByte>) ->\n Self\n {\n Foo\n {\n a: a.into(), b: b.into(), c: c.into(), d: d.into(), e:\n e.into(), f: f.into(),\n }\n } pub fn\n boxes(a: Box<[u8]>, b: Box<[u16]>, c: Box, d:\n Box, e: Box, f: Box<[DiplomatByte]>)\n -> Self { unimplemented!() } pub fn\n boxes_runtime_types(a: DiplomatOwnedSlice, b:\n DiplomatOwnedSlice, c: DiplomatOwnedUTF8StrSlice, d:\n DiplomatOwnedStrSlice, e: DiplomatOwnedStr16Slice, f:\n DiplomatOwnedSlice) -> Self { unimplemented!() } pub\n fn a(self) -> &[u8] { self.a } pub fn b(self) -> &[u16] { self.b }\n pub fn c(self) -> &str { self.c } pub fn d(self) -> &DiplomatStr\n { self.d } pub fn e(self) -> &DiplomatStr16 { self.e } pub fn\n f(self) -> &[DiplomatByte] { self.f }\n }\n }\n}).to_token_stream())" --- mod ffi { use diplomat_runtime::{ DiplomatStr, DiplomatStr16, DiplomatByte, DiplomatOwnedSlice, DiplomatOwnedStr16Slice, DiplomatOwnedStrSlice, DiplomatOwnedUTF8StrSlice, DiplomatSlice, DiplomatSliceMut, DiplomatStr16Slice, DiplomatStrSlice, DiplomatUtf8StrSlice, }; #[repr(C)] struct Foo<'a> { a: DiplomatSlice<'a, u8>, b: DiplomatSlice<'a, u16>, c: DiplomatUtf8StrSlice<'a>, d: DiplomatStrSlice<'a>, e: DiplomatStr16Slice<'a>, f: DiplomatSlice<'a, DiplomatByte>, } impl Foo { pub fn make( a: &'a [u8], b: &'a [u16], c: &'a str, d: &'a DiplomatStr, e: &'a DiplomatStr16, f: &'a [DiplomatByte], ) -> Self { Foo { a, b, c, d, e, f } } pub fn make_runtime_types( a: DiplomatSlice<'a, u8>, b: DiplomatSlice<'a, u16>, c: DiplomatUtf8StrSlice<'a>, d: DiplomatStrSlice<'a>, e: DiplomatStr16Slice<'a>, f: DiplomatSlice<'a, DiplomatByte>, ) -> Self { Foo { a: a.into(), b: b.into(), c: c.into(), d: d.into(), e: e.into(), f: f.into(), } } pub fn boxes( a: Box<[u8]>, b: Box<[u16]>, c: Box, d: Box, e: Box, f: Box<[DiplomatByte]>, ) -> Self { unimplemented!() } pub fn boxes_runtime_types( a: DiplomatOwnedSlice, b: DiplomatOwnedSlice, c: DiplomatOwnedUTF8StrSlice, d: DiplomatOwnedStrSlice, e: DiplomatOwnedStr16Slice, f: DiplomatOwnedSlice, ) -> Self { unimplemented!() } pub fn a(self) -> &[u8] { self.a } pub fn b(self) -> &[u16] { self.b } pub fn c(self) -> &str { self.c } pub fn d(self) -> &DiplomatStr { self.d } pub fn e(self) -> &DiplomatStr16 { self.e } pub fn f(self) -> &[DiplomatByte] { self.f } } use diplomat_runtime::*; use core::ffi::c_void; #[no_mangle] #[allow(deprecated)] extern "C" fn Foo_make( a: diplomat_runtime::DiplomatSlice<'a, u8>, b: diplomat_runtime::DiplomatSlice<'a, u16>, c: diplomat_runtime::DiplomatUtf8StrSlice<'a>, d: diplomat_runtime::DiplomatStrSlice<'a>, e: diplomat_runtime::DiplomatStr16Slice<'a>, f: diplomat_runtime::DiplomatSlice<'a, DiplomatByte>, ) -> Foo { let a = a.into(); let b = b.into(); let c = c.into(); let d = d.into(); let e = e.into(); let f = f.into(); Foo::make(a, b, c, d, e, f) } #[no_mangle] #[allow(deprecated)] extern "C" fn Foo_make_runtime_types( a: diplomat_runtime::DiplomatSlice<'a, u8>, b: diplomat_runtime::DiplomatSlice<'a, u16>, c: diplomat_runtime::DiplomatUtf8StrSlice<'a>, d: diplomat_runtime::DiplomatStrSlice<'a>, e: diplomat_runtime::DiplomatStr16Slice<'a>, f: diplomat_runtime::DiplomatSlice<'a, DiplomatByte>, ) -> Foo { Foo::make_runtime_types(a, b, c, d, e, f) } #[no_mangle] #[allow(deprecated)] extern "C" fn Foo_boxes( a: diplomat_runtime::DiplomatOwnedSlice, b: diplomat_runtime::DiplomatOwnedSlice, c: diplomat_runtime::DiplomatOwnedUTF8StrSlice, d: diplomat_runtime::DiplomatOwnedStrSlice, e: diplomat_runtime::DiplomatOwnedStr16Slice, f: diplomat_runtime::DiplomatOwnedSlice, ) -> Foo { let a = a.into(); let b = b.into(); let c = c.into(); let d = d.into(); let e = e.into(); let f = f.into(); Foo::boxes(a, b, c, d, e, f) } #[no_mangle] #[allow(deprecated)] extern "C" fn Foo_boxes_runtime_types( a: diplomat_runtime::DiplomatOwnedSlice, b: diplomat_runtime::DiplomatOwnedSlice, c: diplomat_runtime::DiplomatOwnedUTF8StrSlice, d: diplomat_runtime::DiplomatOwnedStrSlice, e: diplomat_runtime::DiplomatOwnedStr16Slice, f: diplomat_runtime::DiplomatOwnedSlice, ) -> Foo { Foo::boxes_runtime_types(a, b, c, d, e, f) } #[no_mangle] #[allow(deprecated)] extern "C" fn Foo_a(this: Foo) -> diplomat_runtime::DiplomatSlice { this.a().into() } #[no_mangle] #[allow(deprecated)] extern "C" fn Foo_b(this: Foo) -> diplomat_runtime::DiplomatSlice { this.b().into() } #[no_mangle] #[allow(deprecated)] extern "C" fn Foo_c(this: Foo) -> diplomat_runtime::DiplomatUtf8StrSlice { this.c().into() } #[no_mangle] #[allow(deprecated)] extern "C" fn Foo_d(this: Foo) -> diplomat_runtime::DiplomatStrSlice { this.d().into() } #[no_mangle] #[allow(deprecated)] extern "C" fn Foo_e(this: Foo) -> diplomat_runtime::DiplomatStr16Slice { this.e().into() } #[no_mangle] #[allow(deprecated)] extern "C" fn Foo_f(this: Foo) -> diplomat_runtime::DiplomatSlice { this.f().into() } }