50 lines
1.1 KiB
Rust
50 lines
1.1 KiB
Rust
|
|
use derive_getters::Getters;
|
||
|
|
|
||
|
|
#[derive(Getters)]
|
||
|
|
struct LifetimeAnnotated<'a> {
|
||
|
|
val1: u64,
|
||
|
|
val2: String,
|
||
|
|
buffer: &'a [u8],
|
||
|
|
}
|
||
|
|
|
||
|
|
impl<'a> LifetimeAnnotated<'a> {
|
||
|
|
pub fn new<T: Into<String>>(v1: u64, v2: T, buf: &'a [u8]) -> Self {
|
||
|
|
LifetimeAnnotated {
|
||
|
|
val1: v1,
|
||
|
|
val2: v2.into(),
|
||
|
|
buffer: buf,
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
#[derive(Getters)]
|
||
|
|
struct MultiAnnotated<'a, 'b, 'c, T> {
|
||
|
|
v1: &'a str,
|
||
|
|
v2: &'b [u8],
|
||
|
|
v3: &'c T,
|
||
|
|
}
|
||
|
|
|
||
|
|
impl<'a, 'b, 'c, T> MultiAnnotated<'a, 'b, 'c, T> {
|
||
|
|
pub fn new(v1: &'a str, v2: &'b [u8], v3: &'c T) -> Self {
|
||
|
|
MultiAnnotated { v1, v2, v3 }
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
#[derive(PartialEq, Eq)]
|
||
|
|
struct GenericType;
|
||
|
|
|
||
|
|
fn main() {
|
||
|
|
let buffer: [u8; 12] = [88; 12];
|
||
|
|
let la = LifetimeAnnotated::new(44, "Annot", &buffer);
|
||
|
|
|
||
|
|
assert!(*la.val1() == 44);
|
||
|
|
assert!(la.val2() == "Annot");
|
||
|
|
assert!(la.buffer() == &buffer);
|
||
|
|
|
||
|
|
let gt = GenericType;
|
||
|
|
let ma = MultiAnnotated::new("Hello", &buffer, >);
|
||
|
|
assert!(ma.v1() == "Hello");
|
||
|
|
assert!(ma.v2() == &buffer);
|
||
|
|
assert!(ma.v3() == >);
|
||
|
|
}
|