• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #![allow(clippy::used_underscore_binding)]
2 
3 use serde::{Deserialize, Serialize};
4 
5 #[test]
test_self()6 fn test_self() {
7     pub trait Trait {
8         type Assoc;
9     }
10 
11     #[derive(Deserialize, Serialize)]
12     pub struct Generics<T: Trait<Assoc = Self>>
13     where
14         Self: Trait<Assoc = Self>,
15         <Self as Trait>::Assoc: Sized,
16     {
17         _f: T,
18     }
19 
20     impl<T: Trait<Assoc = Self>> Trait for Generics<T> {
21         type Assoc = Self;
22     }
23 
24     #[derive(Deserialize, Serialize)]
25     pub struct Struct {
26         _f1: Box<Self>,
27         _f2: Box<<Self as Trait>::Assoc>,
28         _f4: [(); Self::ASSOC],
29         _f5: [(); Self::assoc()],
30     }
31 
32     impl Struct {
33         const ASSOC: usize = 1;
34         const fn assoc() -> usize {
35             0
36         }
37     }
38 
39     impl Trait for Struct {
40         type Assoc = Self;
41     }
42 
43     #[derive(Deserialize, Serialize)]
44     struct Tuple(
45         Box<Self>,
46         Box<<Self as Trait>::Assoc>,
47         [(); Self::ASSOC],
48         [(); Self::assoc()],
49     );
50 
51     impl Tuple {
52         const ASSOC: usize = 1;
53         const fn assoc() -> usize {
54             0
55         }
56     }
57 
58     impl Trait for Tuple {
59         type Assoc = Self;
60     }
61 
62     #[derive(Deserialize, Serialize)]
63     enum Enum {
64         Struct {
65             _f1: Box<Self>,
66             _f2: Box<<Self as Trait>::Assoc>,
67             _f4: [(); Self::ASSOC],
68             _f5: [(); Self::assoc()],
69         },
70         Tuple(
71             Box<Self>,
72             Box<<Self as Trait>::Assoc>,
73             [(); Self::ASSOC],
74             [(); Self::assoc()],
75         ),
76     }
77 
78     impl Enum {
79         const ASSOC: usize = 1;
80         const fn assoc() -> usize {
81             0
82         }
83     }
84 
85     impl Trait for Enum {
86         type Assoc = Self;
87     }
88 }
89