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: () } pub struct $name { _private: () }
$(#[$cfg])? $(#[$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] #[inline]
unsafe fn steal() -> Self { pub unsafe fn steal() -> Self {
Self{ _private: ()} Self{ _private: ()}
} }
} }
@ -23,7 +28,6 @@ macro_rules! peripherals {
self self
} }
} }
)* )*
} }
@ -48,23 +52,27 @@ macro_rules! peripherals {
panic!("init called more than once!") panic!("init called more than once!")
} }
_EMBASSY_DEVICE_PERIPHERALS = true; _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] #[inline]
unsafe fn steal() -> Self { pub unsafe fn steal() -> Self {
Self { Self {
$( $(
$(#[$cfg])? $(#[$cfg])?
$name: <peripherals::$name as embassy::util::Steal>::steal(), $name: peripherals::$name::steal(),
)* )*
} }
} }
} }
}; };
} }

View File

@ -2,10 +2,8 @@
mod forever; mod forever;
mod select; mod select;
mod steal;
mod yield_now; mod yield_now;
pub use forever::*; pub use forever::*;
pub use select::*; pub use select::*;
pub use steal::*;
pub use yield_now::*; 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;
}