Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- use std::fmt::Debug;
- use std::ops::{Deref,DerefMut};
- #[derive(Debug)]
- struct Data<T>
- {
- data: T,
- }
- impl<T> Data<T>
- where T: Debug
- {
- fn print(&self)
- {
- println!("{:#?}",self.data);
- }
- }
- impl<T> From<T> for Data<T>
- {
- fn from(data: T)->Data<T>
- {
- Data
- {
- data: data,
- }
- }
- }
- impl<T> Deref for Data<T>
- {
- type Target = T;
- fn deref(&self)->&T
- {
- &self.data
- }
- }
- impl<T> DerefMut for Data<T>
- {
- fn deref_mut(&mut self)->&mut T
- {
- &mut self.data
- }
- }
- fn main()
- {
- println!("Meow.");
- let mut data = Data::from(666u32);
- data.print();
- println!("{}",*data);
- {
- let ref mut x: u32 = *data;
- println!("{}",x);
- }
- let ref x: u32 = *data;
- println!("{}",x);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement