Merge pull request #2914 from wetheredge/mutex-trait-parity
embassy_sync::Mutex: Implement traits to match std
This commit is contained in:
commit
dc30bcfa2e
1 changed files with 77 additions and 1 deletions
|
@ -3,9 +3,9 @@
|
||||||
//! This module provides a mutex that can be used to synchronize data between asynchronous tasks.
|
//! This module provides a mutex that can be used to synchronize data between asynchronous tasks.
|
||||||
use core::cell::{RefCell, UnsafeCell};
|
use core::cell::{RefCell, UnsafeCell};
|
||||||
use core::future::poll_fn;
|
use core::future::poll_fn;
|
||||||
use core::mem;
|
|
||||||
use core::ops::{Deref, DerefMut};
|
use core::ops::{Deref, DerefMut};
|
||||||
use core::task::Poll;
|
use core::task::Poll;
|
||||||
|
use core::{fmt, mem};
|
||||||
|
|
||||||
use crate::blocking_mutex::raw::RawMutex;
|
use crate::blocking_mutex::raw::RawMutex;
|
||||||
use crate::blocking_mutex::Mutex as BlockingMutex;
|
use crate::blocking_mutex::Mutex as BlockingMutex;
|
||||||
|
@ -129,6 +129,42 @@ where
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<M: RawMutex, T> From<T> for Mutex<M, T> {
|
||||||
|
fn from(from: T) -> Self {
|
||||||
|
Self::new(from)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<M, T> Default for Mutex<M, T>
|
||||||
|
where
|
||||||
|
M: RawMutex,
|
||||||
|
T: ?Sized + Default,
|
||||||
|
{
|
||||||
|
fn default() -> Self {
|
||||||
|
Self::new(Default::default())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<M, T> fmt::Debug for Mutex<M, T>
|
||||||
|
where
|
||||||
|
M: RawMutex,
|
||||||
|
T: ?Sized + fmt::Debug,
|
||||||
|
{
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||||
|
let mut d = f.debug_struct("Mutex");
|
||||||
|
match self.try_lock() {
|
||||||
|
Ok(value) => {
|
||||||
|
d.field("inner", &&*value);
|
||||||
|
}
|
||||||
|
Err(TryLockError) => {
|
||||||
|
d.field("inner", &format_args!("<locked>"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
d.finish_non_exhaustive()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Async mutex guard.
|
/// Async mutex guard.
|
||||||
///
|
///
|
||||||
/// Owning an instance of this type indicates having
|
/// Owning an instance of this type indicates having
|
||||||
|
@ -202,6 +238,26 @@ where
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<'a, M, T> fmt::Debug for MutexGuard<'a, M, T>
|
||||||
|
where
|
||||||
|
M: RawMutex,
|
||||||
|
T: ?Sized + fmt::Debug,
|
||||||
|
{
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||||
|
fmt::Debug::fmt(&**self, f)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a, M, T> fmt::Display for MutexGuard<'a, M, T>
|
||||||
|
where
|
||||||
|
M: RawMutex,
|
||||||
|
T: ?Sized + fmt::Display,
|
||||||
|
{
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||||
|
fmt::Display::fmt(&**self, f)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// A handle to a held `Mutex` that has had a function applied to it via [`MutexGuard::map`] or
|
/// A handle to a held `Mutex` that has had a function applied to it via [`MutexGuard::map`] or
|
||||||
/// [`MappedMutexGuard::map`].
|
/// [`MappedMutexGuard::map`].
|
||||||
///
|
///
|
||||||
|
@ -285,6 +341,26 @@ where
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<'a, M, T> fmt::Debug for MappedMutexGuard<'a, M, T>
|
||||||
|
where
|
||||||
|
M: RawMutex,
|
||||||
|
T: ?Sized + fmt::Debug,
|
||||||
|
{
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||||
|
fmt::Debug::fmt(&**self, f)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a, M, T> fmt::Display for MappedMutexGuard<'a, M, T>
|
||||||
|
where
|
||||||
|
M: RawMutex,
|
||||||
|
T: ?Sized + fmt::Display,
|
||||||
|
{
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||||
|
fmt::Display::fmt(&**self, f)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use crate::blocking_mutex::raw::NoopRawMutex;
|
use crate::blocking_mutex::raw::NoopRawMutex;
|
||||||
|
|
Loading…
Reference in a new issue