• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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, &gt);
46     assert!(ma.v1() == "Hello");
47     assert!(ma.v2() == &buffer);
48     assert!(ma.v3() == &gt);
49 }
50