Advertisement
Guest User

Untitled

a guest
May 19th, 2019
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.05 KB | None | 0 0
  1. /// Represents some struct that holds references inside
  2. #[derive(Debug)]
  3. struct MyValue<'a> {
  4. number: &'a u32,
  5. }
  6.  
  7. /// There are many structs similar to `MyValue` and there is a
  8. /// trait common to them all that can create them.
  9. impl<'a> From<&'a u32> for MyValue<'a> {
  10. fn from(value: &'a u32) -> Self {
  11. MyValue {
  12. number: value,
  13. }
  14. }
  15. }
  16.  
  17. /// This produces objects that hold references into it. So the
  18. /// object must be dropped first before any new one is made.
  19. trait Producer<'a, T: 'a> {
  20. fn make(&'a mut self) -> T;
  21. }
  22.  
  23. struct MyProducer {
  24. number: u32,
  25. }
  26.  
  27. impl MyProducer {
  28. fn new() -> Self {
  29. Self { number: 0 }
  30. }
  31. }
  32.  
  33. impl<'a, T: 'a + From<&'a u32>> Producer<'a, T> for MyProducer {
  34. fn make(&'a mut self) -> T {
  35. self.number += 1;
  36. T::from(&self.number)
  37. }
  38. }
  39.  
  40. fn main() {
  41. let mut producer = MyProducer::new();
  42.  
  43. println!("made this: {:?}", <MyProducer as Producer<MyValue>>::make(&mut producer));
  44. println!("made this: {:?}", <MyProducer as Producer<MyValue>>::make(&mut producer));
  45. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement