]>
Commit | Line | Data |
---|---|---|
60c5eb7d | 1 | // build-pass |
0bf4aa26 XL |
2 | #![allow(dead_code)] |
3 | #![allow(unused_variables)] | |
c1a9b12d | 4 | use std::any::TypeId; |
c1a9b12d SL |
5 | use std::rc::Rc; |
6 | ||
7 | type Fp<T> = Rc<T>; | |
8 | ||
9 | struct Engine; | |
10 | ||
9e0c209e | 11 | trait Component: 'static {} |
c1a9b12d SL |
12 | impl Component for Engine {} |
13 | ||
14 | trait Env { | |
dc9dc135 | 15 | fn get_component_type_id(&self, type_id: TypeId) -> Option<Fp<dyn Component>>; |
c1a9b12d SL |
16 | } |
17 | ||
dc9dc135 | 18 | impl<'a> dyn Env + 'a { |
c1a9b12d SL |
19 | fn get_component<T: Component>(&self) -> Option<Fp<T>> { |
20 | let x = self.get_component_type_id(TypeId::of::<T>()); | |
21 | None | |
22 | } | |
23 | } | |
24 | ||
25 | trait Figment { | |
dc9dc135 | 26 | fn init(&mut self, env: &dyn Env); |
c1a9b12d SL |
27 | } |
28 | ||
29 | struct MyFigment; | |
30 | ||
31 | impl Figment for MyFigment { | |
dc9dc135 | 32 | fn init(&mut self, env: &dyn Env) { |
c1a9b12d SL |
33 | let engine = env.get_component::<Engine>(); |
34 | } | |
35 | } | |
36 | ||
37 | fn main() {} |