1 use derive_getters::Getters;
2
3 #[derive(Getters)]
4 struct LifetimeAnnotated<'a> {
5 val1: u64,
6 val2: String,
7 buffer: &'a [u8],
8 }
9
10 impl<'a> LifetimeAnnotated<'a> {
new<T: Into<String>>(v1: u64, v2: T, buf: &'a [u8]) -> Self11 pub fn new<T: Into<String>>(v1: u64, v2: T, buf: &'a [u8]) -> Self {
12 LifetimeAnnotated {
13 val1: v1,
14 val2: v2.into(),
15 buffer: buf,
16 }
17 }
18 }
19
20 #[derive(Getters)]
21 struct MultiAnnotated<'a, 'b, 'c, T> {
22 v1: &'a str,
23 v2: &'b [u8],
24 v3: &'c T,
25 }
26
27 impl<'a, 'b, 'c, T> MultiAnnotated<'a, 'b, 'c, T> {
new(v1: &'a str, v2: &'b [u8], v3: &'c T) -> Self28 pub fn new(v1: &'a str, v2: &'b [u8], v3: &'c T) -> Self {
29 MultiAnnotated { v1, v2, v3 }
30 }
31 }
32
33 #[derive(PartialEq, Eq)]
34 struct GenericType;
35
main()36 fn main() {
37 let buffer: [u8; 12] = [88; 12];
38 let la = LifetimeAnnotated::new(44, "Annot", &buffer);
39
40 assert!(*la.val1() == 44);
41 assert!(la.val2() == "Annot");
42 assert!(la.buffer() == &buffer);
43
44 let gt = GenericType;
45 let ma = MultiAnnotated::new("Hello", &buffer, >);
46 assert!(ma.v1() == "Hello");
47 assert!(ma.v2() == &buffer);
48 assert!(ma.v3() == >);
49 }
50