Advertisement
Guest User

Untitled

a guest
Sep 3rd, 2015
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.66 KB | None | 0 0
  1. use std::fmt::Debug;
  2. use std::ops::{Deref,DerefMut};
  3.  
  4. #[derive(Debug)]
  5. struct Data<T>
  6. {
  7. data: T,
  8. }
  9.  
  10. impl<T> Data<T>
  11. where T: Debug
  12. {
  13. fn print(&self)
  14. {
  15. println!("{:#?}",self.data);
  16. }
  17. }
  18.  
  19. impl<T> From<T> for Data<T>
  20. {
  21. fn from(data: T)->Data<T>
  22. {
  23. Data
  24. {
  25. data: data,
  26. }
  27. }
  28. }
  29.  
  30. impl<T> Deref for Data<T>
  31. {
  32. type Target = T;
  33.  
  34. fn deref(&self)->&T
  35. {
  36. &self.data
  37. }
  38. }
  39.  
  40. impl<T> DerefMut for Data<T>
  41. {
  42. fn deref_mut(&mut self)->&mut T
  43. {
  44. &mut self.data
  45. }
  46. }
  47.  
  48. fn main()
  49. {
  50. println!("Meow.");
  51.  
  52. let mut data = Data::from(666u32);
  53.  
  54. data.print();
  55.  
  56. println!("{}",*data);
  57.  
  58. {
  59. let ref mut x: u32 = *data;
  60. println!("{}",x);
  61. }
  62.  
  63. let ref x: u32 = *data;
  64. println!("{}",x);
  65. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement