extern crate core_extensions; use core_extensions::type_level_bool::{True,False,MutableIfTrue}; #[derive(Debug,PartialEq,Copy,Clone)] pub struct Point{ x:u32, y:u32, } fn main(){ let mut wrapped=MutableIfTrue::new(Point{x:0,y:0},True); let point_1=Point{x:0,y:1}; *wrapped=point_1; assert_eq!(*wrapped,point_1); let mut wrapped:MutableIfTrue= wrapped.freeze(); // Neither of the lines bellow will compile because mutability==`False` //*wrapped=Point{x:0,y:1}; //wrapped.x=200; let point_2=Point{x:101,y:202}; //But this will compile wrapped=MutableIfTrue::new(point_2,wrapped.mutability()); assert_eq!(*wrapped,point_2); }