1 use derive_getters::Getters;
2
3 #[derive(Getters)]
4 struct SimpleSingleGeneric<T> {
5 concrete: u16,
6 generic: T,
7 }
8
9 impl<T> SimpleSingleGeneric<T> {
new(concrete: u16, generic: T) -> Self10 pub fn new(concrete: u16, generic: T) -> Self {
11 SimpleSingleGeneric { concrete, generic }
12 }
13 }
14
15 #[derive(PartialEq, Eq, PartialOrd, Ord)]
16 pub enum Enumeration {
17 One,
18 Two,
19 Three,
20 }
21
22 #[derive(Getters)]
23 struct InvolvedSingleGeneric<T: Eq + Ord> {
24 concrete: u16,
25 generic: T,
26 }
27
28 impl <T: Eq + Ord> InvolvedSingleGeneric<T> {
new(concrete: u16, generic: T) -> Self29 pub fn new(concrete: u16, generic: T) -> Self {
30 InvolvedSingleGeneric { concrete, generic }
31 }
32 }
33
34 #[derive(Getters)]
35 struct WhereClauseSingleGeneric<T>
36 where T: Eq + Ord
37 {
38 concrete: u16,
39 generic: T,
40 }
41
42 impl<T> WhereClauseSingleGeneric<T>
43 where T: Eq + Ord
44 {
new(concrete: u16, generic: T) -> Self45 pub fn new(concrete: u16, generic: T) -> Self {
46 WhereClauseSingleGeneric { concrete, generic }
47 }
48 }
49
main()50 fn main() {
51 let ssg = SimpleSingleGeneric::new(23, "Hello".to_string());
52 assert!(*ssg.concrete() == 23);
53 assert!(ssg.generic() == "Hello");
54
55 let isg = InvolvedSingleGeneric::new(44, Enumeration::Two);
56 assert!(*isg.concrete() == 44);
57 assert!(*isg.generic() == Enumeration::Two);
58
59 let wcsg = WhereClauseSingleGeneric::new(99, Enumeration::Three);
60 assert!(*wcsg.concrete() == 99);
61 assert!(*wcsg.generic() == Enumeration::Three);
62 }
63