63 lines
1.3 KiB
Rust
63 lines
1.3 KiB
Rust
use derive_getters::Getters;
|
|
|
|
#[derive(Getters)]
|
|
struct SimpleSingleGeneric<T> {
|
|
concrete: u16,
|
|
generic: T,
|
|
}
|
|
|
|
impl<T> SimpleSingleGeneric<T> {
|
|
pub fn new(concrete: u16, generic: T) -> Self {
|
|
SimpleSingleGeneric { concrete, generic }
|
|
}
|
|
}
|
|
|
|
#[derive(PartialEq, Eq, PartialOrd, Ord)]
|
|
pub enum Enumeration {
|
|
One,
|
|
Two,
|
|
Three,
|
|
}
|
|
|
|
#[derive(Getters)]
|
|
struct InvolvedSingleGeneric<T: Eq + Ord> {
|
|
concrete: u16,
|
|
generic: T,
|
|
}
|
|
|
|
impl <T: Eq + Ord> InvolvedSingleGeneric<T> {
|
|
pub fn new(concrete: u16, generic: T) -> Self {
|
|
InvolvedSingleGeneric { concrete, generic }
|
|
}
|
|
}
|
|
|
|
#[derive(Getters)]
|
|
struct WhereClauseSingleGeneric<T>
|
|
where T: Eq + Ord
|
|
{
|
|
concrete: u16,
|
|
generic: T,
|
|
}
|
|
|
|
impl<T> WhereClauseSingleGeneric<T>
|
|
where T: Eq + Ord
|
|
{
|
|
pub fn new(concrete: u16, generic: T) -> Self {
|
|
WhereClauseSingleGeneric { concrete, generic }
|
|
}
|
|
}
|
|
|
|
fn main() {
|
|
let ssg = SimpleSingleGeneric::new(23, "Hello".to_string());
|
|
assert!(*ssg.concrete() == 23);
|
|
assert!(ssg.generic() == "Hello");
|
|
|
|
let isg = InvolvedSingleGeneric::new(44, Enumeration::Two);
|
|
assert!(*isg.concrete() == 44);
|
|
assert!(*isg.generic() == Enumeration::Two);
|
|
|
|
let wcsg = WhereClauseSingleGeneric::new(99, Enumeration::Three);
|
|
assert!(*wcsg.concrete() == 99);
|
|
assert!(*wcsg.generic() == Enumeration::Three);
|
|
}
|