Change steal() from trait to inherent fns.

This commit is contained in:
Dario Nieuwenhuis 2022-07-22 16:06:45 +02:00
parent a77ff72197
commit ffbd9363f2
3 changed files with 16 additions and 23 deletions

View File

@ -8,9 +8,14 @@ macro_rules! peripherals {
pub struct $name { _private: () }
$(#[$cfg])?
impl embassy::util::Steal for $name {
impl $name {
/// Unsafely create an instance of this peripheral out of thin air.
///
/// # Safety
///
/// You must ensure that you're only using one instance of this type at a time.
#[inline]
unsafe fn steal() -> Self {
pub unsafe fn steal() -> Self {
Self{ _private: ()}
}
}
@ -23,7 +28,6 @@ macro_rules! peripherals {
self
}
}
)*
}
@ -48,23 +52,27 @@ macro_rules! peripherals {
panic!("init called more than once!")
}
_EMBASSY_DEVICE_PERIPHERALS = true;
<Self as embassy::util::Steal>::steal()
Self::steal()
})
}
}
impl embassy::util::Steal for Peripherals {
impl Peripherals {
/// Unsafely create an instance of this peripheral out of thin air.
///
/// # Safety
///
/// You must ensure that you're only using one instance of this type at a time.
#[inline]
unsafe fn steal() -> Self {
pub unsafe fn steal() -> Self {
Self {
$(
$(#[$cfg])?
$name: <peripherals::$name as embassy::util::Steal>::steal(),
$name: peripherals::$name::steal(),
)*
}
}
}
};
}

View File

@ -2,10 +2,8 @@
mod forever;
mod select;
mod steal;
mod yield_now;
pub use forever::*;
pub use select::*;
pub use steal::*;
pub use yield_now::*;

View File

@ -1,13 +0,0 @@
/// A type that can retrieved unsafely from anywhere.
pub trait Steal {
/// Retrieve and instance of this type.
///
/// # Safety
///
/// It is the responsibility of the application to ensure that the
/// usage of the returned instance is not in conflict with other uses
/// of this instance.
///
/// The implementation may panic if the instance is already in use.
unsafe fn steal() -> Self;
}