pub unsafe fn ouroboros_change_lifetime<'old, 'new: 'old, T: 'new>(data: &'old T) -> &'new T {
&*(data as *const _)
}
pub unsafe fn ouroboros_change_lifetime_mut<'old, 'new: 'old, T: 'new>(
data: &'old mut T,
) -> &'new mut T {
&mut *(data as *mut _)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn changes_immutable_lifetime() {
let value = 42;
let reference = unsafe { ouroboros_change_lifetime(&value) };
assert_eq!(*reference, 42);
}
#[test]
fn changes_mutable_lifetime() {
let mut value = 42;
let reference = unsafe { ouroboros_change_lifetime_mut(&mut value) };
*reference = 100;
assert_eq!(value, 100);
}
}