Guest User

Untitled

a guest
Dec 15th, 2018
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.87 KB | None | 0 0
  1. // If your inner message implementation doesn't depend on the owner you can do this:
  2.  
  3. #[derive(Default)]
  4. struct Message {
  5. e: Option<*mut u8>
  6. }
  7.  
  8. trait Owner {
  9. type Message: Default;
  10. fn produce_message(&self) -> Self::Message {
  11. Default::default()
  12. }
  13. }
  14.  
  15. struct You;
  16. struct Me;
  17.  
  18. #[derive(Default)]
  19. struct YourMessage(Message);
  20.  
  21. #[derive(Default)]
  22. struct MyMessage(Message);
  23.  
  24. impl Owner for You { type Message = YourMessage; }
  25. impl Owner for Me { type Message = MyMessage; }
  26.  
  27. impl Drop for YourMessage {
  28. fn drop(&mut self) {
  29. println!("drop YourMessage");
  30. println!("free(self.0.e)");
  31. }
  32. }
  33.  
  34. impl Drop for MyMessage {
  35. fn drop(&mut self) {
  36. println!("drop MyMessage");
  37. println!("free_magic(self.0.e)");
  38. }
  39. }
  40.  
  41. fn main() {
  42. let y = You;
  43. y.produce_message();
  44.  
  45. let m = Me;
  46. m.produce_message();
  47. m.produce_message();
  48. }
Add Comment
Please, Sign In to add comment