Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- use std::marker::PhantomData;
- use std::os::raw::c_void;
- use std::mem::transmute;
- struct Rute<'a> {
- _marker: PhantomData<&'a u32>,
- }
- #[derive(Copy, Clone)]
- struct Widget<'a> {
- _marker: PhantomData<&'a u32>,
- }
- impl<'a> Widget<'a> {
- pub fn size(&mut self, _width: i32, _height: i32) -> &mut Widget<'a> {
- self
- }
- pub fn on_change<T>(&mut self, data: &'a mut T) -> &mut Widget<'a>
- where T: 'a,
- {
- unsafe {
- let user_data: *const c_void = transmute(data);
- println!("{:?}", user_data)
- }
- self
- }
- }
- impl<'a> Rute<'a> {
- pub fn create_widget(&'a mut self) -> Widget<'a> {
- Widget { _marker: PhantomData }
- }
- }
- fn main() {
- let mut foo = 1;
- let mut rute = Rute { _marker: PhantomData };
- {
- rute.create_widget()
- .size(100, 100)
- .on_change(&mut foo);
- //rute.on_change(&mut foo);
- }
- }
Add Comment
Please, Sign In to add comment