88 lines
2.1 KiB
Rust
88 lines
2.1 KiB
Rust
use std::ops::Div;
|
|
|
|
use derive_getters::Getters;
|
|
|
|
#[derive(Getters)]
|
|
struct SimpleMultiGeneric<T, U, V> {
|
|
concrete: u16,
|
|
generic_t: T,
|
|
generic_u: U,
|
|
generic_v: V,
|
|
}
|
|
|
|
impl<T, U, V> SimpleMultiGeneric<T, U, V> {
|
|
pub fn new(concrete: u16, generic_t: T, generic_u: U, generic_v: V) -> Self {
|
|
SimpleMultiGeneric { concrete, generic_t, generic_u, generic_v }
|
|
}
|
|
}
|
|
|
|
#[derive(PartialEq, Eq, PartialOrd, Ord)]
|
|
pub enum Enumeration {
|
|
One,
|
|
Two,
|
|
Three,
|
|
}
|
|
|
|
#[derive(Getters)]
|
|
struct InvolvedMultiGeneric<T: Eq + Ord, U: Div, V: Clone> {
|
|
concrete: u16,
|
|
generic_t: T,
|
|
generic_u: U,
|
|
generic_v: V,
|
|
}
|
|
|
|
impl <T: Eq + Ord, U: Div, V: Clone> InvolvedMultiGeneric<T, U, V> {
|
|
pub fn new(concrete: u16, generic_t: T, generic_u: U, generic_v: V) -> Self {
|
|
InvolvedMultiGeneric { concrete, generic_t, generic_u, generic_v }
|
|
}
|
|
}
|
|
|
|
|
|
#[derive(Getters)]
|
|
struct WhereClauseMultiGeneric<T, U, V>
|
|
where T: Eq + Ord,
|
|
U: Div,
|
|
V: Clone,
|
|
{
|
|
concrete: u16,
|
|
generic_t: T,
|
|
generic_u: U,
|
|
generic_v: V,
|
|
}
|
|
|
|
impl<T, U, V> WhereClauseMultiGeneric<T, U, V>
|
|
where T: Eq + Ord,
|
|
U: Div,
|
|
V: Clone,
|
|
{
|
|
pub fn new(concrete: u16, generic_t: T, generic_u: U, generic_v: V) -> Self {
|
|
WhereClauseMultiGeneric { concrete, generic_t, generic_u, generic_v }
|
|
}
|
|
}
|
|
|
|
fn main() {
|
|
let smg = SimpleMultiGeneric::new(
|
|
23, "Hello".to_string(), 55f64, [1, 2, 3],
|
|
);
|
|
assert!(*smg.concrete() == 23);
|
|
assert!(smg.generic_t() == "Hello");
|
|
assert!(*smg.generic_u() == 55f64);
|
|
assert!(*smg.generic_v() == [1, 2, 3]);
|
|
|
|
let img = InvolvedMultiGeneric::new(
|
|
44, Enumeration::Two, 1024f32, "String".to_string(),
|
|
);
|
|
assert!(*img.concrete() == 44);
|
|
assert!(*img.generic_t() == Enumeration::Two);
|
|
assert!(*img.generic_u() == 1024f32);
|
|
assert!(img.generic_v() == "String");
|
|
|
|
let wcmg = WhereClauseMultiGeneric::new(
|
|
99, Enumeration::Three, 1222f64, "Might".to_string()
|
|
);
|
|
assert!(*wcmg.concrete() == 99);
|
|
assert!(*wcmg.generic_t() == Enumeration::Three);
|
|
assert!(*wcmg.generic_u() == 1222f64);
|
|
assert!(wcmg.generic_v() == "Might");
|
|
}
|