summaryrefslogtreecommitdiffstats
path: root/third_party/rust/diplomat/src/snapshots/diplomat__tests__multilevel_borrows.snap
blob: f662608096cc326ee7babce7707cc69992b2a07c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
---
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 >\n                                (& 'b Foo < 'a >) ; struct Baz < 'x, 'y >\n                                { foo : & 'y Foo < 'x >, } impl < 'a > Foo < 'a >\n                                {\n                                    pub fn new(x : & 'a str) -> Box < Foo < 'a >>\n                                    { unimplemented! () } pub fn get_bar < 'b > (& 'b self) ->\n                                    Box < Bar < 'b, 'a >> { unimplemented! () } pub fn get_baz <\n                                    'b > (& 'b self) -> Baz < 'b, '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 }
        }
    }
    #[no_mangle]
    extern "C" fn Bar_destroy<'b, 'a: 'b>(this: Box<Bar<'b, 'a>>) {}
    #[no_mangle]
    extern "C" fn Baz_destroy<'x: 'y, 'y>(this: Box<Baz<'x, 'y>>) {}
    #[no_mangle]
    extern "C" fn Foo_new<'a>(x_diplomat_data: *const u8, x_diplomat_len: usize) -> Box<Foo<'a>> {
        Foo::new(unsafe {
            core::str::from_utf8(core::slice::from_raw_parts(x_diplomat_data, x_diplomat_len))
                .unwrap()
        })
    }
    #[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>>) {}
}