impl Unborrow for &'a mut T
This plays nicer with user code that's generic over peripheral traits like `Instance` or `Pin`.
This commit is contained in:
		@@ -24,14 +24,6 @@ macro_rules! peripherals {
 | 
				
			|||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                $(#[$cfg])?
 | 
					 | 
				
			||||||
                impl embassy::util::Unborrow for &mut $name {
 | 
					 | 
				
			||||||
                    type Target = $name;
 | 
					 | 
				
			||||||
                    #[inline]
 | 
					 | 
				
			||||||
                    unsafe fn unborrow(self) -> $name {
 | 
					 | 
				
			||||||
                        ::core::ptr::read(self)
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            )*
 | 
					            )*
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -95,14 +87,6 @@ macro_rules! impl_unborrow {
 | 
				
			|||||||
                self
 | 
					                self
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					 | 
				
			||||||
        impl<'a> ::embassy::util::Unborrow for &'a mut $type {
 | 
					 | 
				
			||||||
            type Target = $type;
 | 
					 | 
				
			||||||
            #[inline]
 | 
					 | 
				
			||||||
            unsafe fn unborrow(self) -> Self::Target {
 | 
					 | 
				
			||||||
                unsafe { ::core::ptr::read(self) }
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -216,13 +216,6 @@ pub fn interrupt_declare(item: TokenStream) -> TokenStream {
 | 
				
			|||||||
                self
 | 
					                self
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					 | 
				
			||||||
        impl ::embassy::util::Unborrow for &mut #name_interrupt {
 | 
					 | 
				
			||||||
            type Target = #name_interrupt;
 | 
					 | 
				
			||||||
            unsafe fn unborrow(self) -> #name_interrupt {
 | 
					 | 
				
			||||||
                ::core::ptr::read(self)
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
    result.into()
 | 
					    result.into()
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -22,6 +22,13 @@ pub trait Unborrow {
 | 
				
			|||||||
    unsafe fn unborrow(self) -> Self::Target;
 | 
					    unsafe fn unborrow(self) -> Self::Target;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					impl<'a, T: Unborrow> Unborrow for &'a mut T {
 | 
				
			||||||
 | 
					    type Target = T::Target;
 | 
				
			||||||
 | 
					    unsafe fn unborrow(self) -> Self::Target {
 | 
				
			||||||
 | 
					        T::unborrow(core::ptr::read(self))
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub trait Steal {
 | 
					pub trait Steal {
 | 
				
			||||||
    unsafe fn steal() -> Self;
 | 
					    unsafe fn steal() -> Self;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -40,17 +47,6 @@ macro_rules! impl_unborrow_tuples {
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        impl<'a, $($t),+> Unborrow for &'a mut($($t),+)
 | 
					 | 
				
			||||||
        where
 | 
					 | 
				
			||||||
            $(
 | 
					 | 
				
			||||||
                $t: Unborrow<Target = $t>
 | 
					 | 
				
			||||||
            ),+
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            type Target = ($($t),+);
 | 
					 | 
				
			||||||
            unsafe fn unborrow(self) -> Self::Target {
 | 
					 | 
				
			||||||
                ::core::ptr::read(self)
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user