Guest User

Untitled

a guest
Jul 19th, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.91 KB | None | 0 0
  1. use std::marker::PhantomData;
  2. use std::os::raw::c_void;
  3. use std::mem::transmute;
  4.  
  5. struct Rute<'a> {
  6. _marker: PhantomData<&'a u32>,
  7. }
  8.  
  9. #[derive(Copy, Clone)]
  10. struct Widget<'a> {
  11. _marker: PhantomData<&'a u32>,
  12. }
  13.  
  14. impl<'a> Widget<'a> {
  15. pub fn size(&mut self, _width: i32, _height: i32) -> &mut Widget<'a> {
  16. self
  17. }
  18.  
  19. pub fn on_change<T>(&mut self, data: &'a mut T) -> &mut Widget<'a>
  20. where T: 'a,
  21. {
  22. unsafe {
  23. let user_data: *const c_void = transmute(data);
  24. println!("{:?}", user_data)
  25. }
  26.  
  27. self
  28. }
  29. }
  30.  
  31. impl<'a> Rute<'a> {
  32. pub fn create_widget(&'a mut self) -> Widget<'a> {
  33. Widget { _marker: PhantomData }
  34. }
  35. }
  36.  
  37. fn main() {
  38. let mut foo = 1;
  39. let mut rute = Rute { _marker: PhantomData };
  40.  
  41. {
  42. rute.create_widget()
  43. .size(100, 100)
  44. .on_change(&mut foo);
  45. //rute.on_change(&mut foo);
  46. }
  47. }
Add Comment
Please, Sign In to add comment