Advertisement
Guest User

Untitled

a guest
Jun 15th, 2019
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.90 KB | None | 0 0
  1. impl<'a> From<&'a CommonMetrics> for HandlerMetricsImpl<'a> {
  2. fn from(metrics: &'a CommonMetrics) -> HandlerMetricsImpl<'a> {
  3. HandlerMetricsImpl{cm: metrics}
  4. }
  5. }
  6.  
  7. // impl From<&CommonMetrics> for HandlerMetricsImpl2 {
  8. // fn from(metrics: &CommonMetrics) -> HandlerMetricsImpl2 {
  9. // HandlerMetricsImpl2
  10. // }
  11. // }
  12.  
  13. trait CommonMetrics {}
  14. struct CommonMetricsImpl;
  15. impl CommonMetrics for CommonMetricsImpl {}
  16.  
  17. trait Dispatcher<Metrics> {
  18. fn dispatch(&self, metrics: Metrics, val: u64);
  19. }
  20. struct DispatcherImpl<Metrics>(Box<dyn Handler<Metrics>>);
  21. impl<Metrics1> Dispatcher<Metrics1> for DispatcherImpl<Metrics1> where Metrics1: CommonMetrics
  22. {
  23. fn dispatch(&self, metrics: Metrics1, val: u64) {
  24. // match val {
  25. // 0 => self.0.handle(metrics),
  26. // _ => self.1.handle(metrics),
  27. // }
  28. self.0.handle(metrics); // This doesn't work, why? type inference issue?
  29. }
  30. }
  31.  
  32. trait HandlerMetrics {}
  33. struct HandlerMetricsImpl<'a> {
  34. cm: &'a CommonMetrics,
  35. }
  36.  
  37. impl<'a> HandlerMetrics for HandlerMetricsImpl<'a> {}
  38.  
  39. trait Handler<Metrics> {
  40. fn handle(&self, metrics: Metrics);
  41. }
  42. struct HandlerImpl;
  43. impl<Metrics2> Handler<Metrics2> for HandlerImpl where Metrics2: HandlerMetrics
  44. {
  45. fn handle(&self, metrics: Metrics2) {}
  46. }
  47.  
  48. // trait HandlerMetrics2 {}
  49. // struct HandlerMetricsImpl2;
  50. // impl HandlerMetrics2 for HandlerMetricsImpl2 {}
  51.  
  52. // trait Handler2<Metrics> {
  53. // fn handle(&self, metrics: Metrics);
  54. // }
  55. // struct HandlerImpl2;
  56. // impl<Metrics2> Handler2<Metrics2> for HandlerImpl2 where Metrics2: HandlerMetrics2
  57. // {
  58. // fn handle(&self, metrics: Metrics2) {}
  59. // }
  60.  
  61. // fn main() {
  62. // let handler = HandlerImpl;
  63. // handler.handle(HandlerMetricsImpl); // This works
  64. //
  65. // let handler = Box::new(HandlerImpl);
  66. // let handler2 = Box::new(HandlerImpl2);
  67. // let dispatcher: Dispatcher<_: ?Sized> = DispatcherImpl(handler, handler2);
  68. // }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement