1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
pub fn remember<'a, T>(data: &'a T) -> &'static T {
    unsafe {
        std::mem::transmute(data)
    }
}

pub fn remember_mut<'a, 'b, T>(data: &'a mut T) -> &'b mut T {
    unsafe {
        std::mem::transmute(data)
    }
}


#[cfg(test)]
mod tests {
    use crate::remember;
    #[test]
    fn test_remember() {
        let mut data = 1;
        let refer = &data;
        let refer = remember(refer);
        let mut_refer = &mut data;
        assert_eq!(*refer, 1);
        *mut_refer = 2;
        assert_eq!(*refer, 2);
    }
}