isomorphic
A crate for getting a reference to an isomorphic type.
Usage
ref_of, mut_ref_of and clone_of
use ;
;
let v = 42;
let v_struct = ST;
let ref_struct_as_v: &i32 = unsafe ; // OK
assert_eq!;
assert_eq!;
let v_enum = ETFoo;
let ref_enum_as_v: &i32 = unsafe ; // OK
assert_eq!;
assert_eq!;
let v_next = v + 1;
let mut v_mut_struct = ST;
let ref_mut_struct_as_v: &mut i32 = unsafe ; // OK
assert_eq!;
*ref_mut_struct_as_v = v_next;
assert_eq!;
let mut v_mut_enum = ETFoo;
let ref_mut_enum_as_v: &mut i32 = unsafe ; // OK
assert_eq!;
*ref_mut_enum_as_v = v_next;
assert_eq!;
Macros: impl_ref, impl_mut and impl_transmute
When the feature macros is enabled, you can use the macros impl_ref, impl_mut and impl_transmute to automatically implement the AsRef, AsMut and From traits for your types.
// With `macros` feature for `isomorphic`
use ;
;
impl_ref!;
let v = 42;
let v_struct = ST;
let ref_struct_as_v: &i32 = v_struct.as_ref; // OK
let ref_v_as_struct: & = v.as_ref; // OK
assert_eq!;
impl_mut!;
let mut v = 42;
let mut v_struct = ST;
let ref_mut_struct_as_v: &mut i32 = v_struct.as_mut; // OK
let ref_v_as_mut_struct: &mut = v.as_mut; // OK
*ref_mut_struct_as_v += 1;
ref_v_as_mut_struct.0 += 1;
assert_eq!;
impl_transmute!;
let v = 42;
let v_struct = ST;
let v_from_struct: i32 = v_struct.into; // OK
let struct_from_v: = v.into; // OK
assert_eq!;
assert_eq!;