diff --git a/src/opt.rs b/src/opt.rs index 5fdcdf9..ef02e87 100644 --- a/src/opt.rs +++ b/src/opt.rs @@ -42,9 +42,12 @@ impl OwnRef<'_, T> { #[macro_export] macro_rules! _to_opt_own_ref { - ($var:ident) => { + ($var:ident) => { $crate::_to_opt_own_ref!(# $var) }; + (mut $var:ident) => { $crate::_to_opt_own_ref!(mut # $var) }; + + ($($mut:ident)? # $var:ident) => { let mut $var = Some($var); - let $var = OwnRef::from_option(&mut $var); + let $($mut)? $var = OwnRef::from_option(&mut $var); }; } diff --git a/src/ptr.rs b/src/ptr.rs index 5f0d2a7..fdcad87 100644 --- a/src/ptr.rs +++ b/src/ptr.rs @@ -68,9 +68,12 @@ impl OwnRef<'_, dyn std::any::Any> { #[macro_export] macro_rules! _to_ptr_own_ref { - ($var:ident) => { + ($var:ident) => { $crate::_to_ptr_own_ref!(# $var) }; + (mut $var:ident) => { $crate::_to_ptr_own_ref!(mut # $var) }; + + ($($mut:ident)? # $var:ident) => { let mut $var = ManuallyDrop::new($var); - let $var = unsafe { OwnRef::from_manually_drop(&mut $var) }; + let $($mut)? $var = unsafe { OwnRef::from_manually_drop(&mut $var) }; }; }