embassy_sync/pubsub: fix PubSubBehavior visibility
https://github.com/embassy-rs/embassy/pull/2969 appears to have broken direct `publish_immediate()` on `pubsub::Channel`, as it functionally made `PubSubBehavior` private and didn't delegate this method to the new (private) `SealedPubSubBehavior`. This change moves `publish_immediate`, `capacity`, and `is_full` from `SealedPubSubBehavior` to `PubSubBehavior` in order to restore them to `pub` visibility.
This commit is contained in:
parent
cdb44f1272
commit
893b8d79e8
@ -194,6 +194,25 @@ impl<M: RawMutex, T: Clone, const CAP: usize, const SUBS: usize, const PUBS: usi
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<M: RawMutex, T: Clone, const CAP: usize, const SUBS: usize, const PUBS: usize> crate::pubsub::PubSubBehavior<T>
|
||||||
|
for PubSubChannel<M, T, CAP, SUBS, PUBS>
|
||||||
|
{
|
||||||
|
fn publish_immediate(&self, message: T) {
|
||||||
|
self.inner.lock(|s| {
|
||||||
|
let mut s = s.borrow_mut();
|
||||||
|
s.publish_immediate(message)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
fn capacity(&self) -> usize {
|
||||||
|
self.capacity()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn is_full(&self) -> bool {
|
||||||
|
self.is_full()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl<M: RawMutex, T: Clone, const CAP: usize, const SUBS: usize, const PUBS: usize> SealedPubSubBehavior<T>
|
impl<M: RawMutex, T: Clone, const CAP: usize, const SUBS: usize, const PUBS: usize> SealedPubSubBehavior<T>
|
||||||
for PubSubChannel<M, T, CAP, SUBS, PUBS>
|
for PubSubChannel<M, T, CAP, SUBS, PUBS>
|
||||||
{
|
{
|
||||||
@ -246,13 +265,6 @@ impl<M: RawMutex, T: Clone, const CAP: usize, const SUBS: usize, const PUBS: usi
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fn publish_immediate(&self, message: T) {
|
|
||||||
self.inner.lock(|s| {
|
|
||||||
let mut s = s.borrow_mut();
|
|
||||||
s.publish_immediate(message)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
fn unregister_subscriber(&self, subscriber_next_message_id: u64) {
|
fn unregister_subscriber(&self, subscriber_next_message_id: u64) {
|
||||||
self.inner.lock(|s| {
|
self.inner.lock(|s| {
|
||||||
let mut s = s.borrow_mut();
|
let mut s = s.borrow_mut();
|
||||||
@ -267,10 +279,6 @@ impl<M: RawMutex, T: Clone, const CAP: usize, const SUBS: usize, const PUBS: usi
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fn capacity(&self) -> usize {
|
|
||||||
self.capacity()
|
|
||||||
}
|
|
||||||
|
|
||||||
fn free_capacity(&self) -> usize {
|
fn free_capacity(&self) -> usize {
|
||||||
self.free_capacity()
|
self.free_capacity()
|
||||||
}
|
}
|
||||||
@ -286,10 +294,6 @@ impl<M: RawMutex, T: Clone, const CAP: usize, const SUBS: usize, const PUBS: usi
|
|||||||
fn is_empty(&self) -> bool {
|
fn is_empty(&self) -> bool {
|
||||||
self.is_empty()
|
self.is_empty()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn is_full(&self) -> bool {
|
|
||||||
self.is_full()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Internal state for the PubSub channel
|
/// Internal state for the PubSub channel
|
||||||
@ -445,8 +449,6 @@ pub enum Error {
|
|||||||
MaximumPublishersReached,
|
MaximumPublishersReached,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// 'Middle level' behaviour of the pubsub channel.
|
|
||||||
/// This trait is used so that Sub and Pub can be generic over the channel.
|
|
||||||
trait SealedPubSubBehavior<T> {
|
trait SealedPubSubBehavior<T> {
|
||||||
/// Try to get a message from the queue with the given message id.
|
/// Try to get a message from the queue with the given message id.
|
||||||
///
|
///
|
||||||
@ -462,12 +464,6 @@ trait SealedPubSubBehavior<T> {
|
|||||||
/// If the queue is full and a context is given, then its waker is registered in the publisher wakers.
|
/// If the queue is full and a context is given, then its waker is registered in the publisher wakers.
|
||||||
fn publish_with_context(&self, message: T, cx: Option<&mut Context<'_>>) -> Result<(), T>;
|
fn publish_with_context(&self, message: T, cx: Option<&mut Context<'_>>) -> Result<(), T>;
|
||||||
|
|
||||||
/// Publish a message immediately
|
|
||||||
fn publish_immediate(&self, message: T);
|
|
||||||
|
|
||||||
/// Returns the maximum number of elements the channel can hold.
|
|
||||||
fn capacity(&self) -> usize;
|
|
||||||
|
|
||||||
/// Returns the free capacity of the channel.
|
/// Returns the free capacity of the channel.
|
||||||
///
|
///
|
||||||
/// This is equivalent to `capacity() - len()`
|
/// This is equivalent to `capacity() - len()`
|
||||||
@ -482,9 +478,6 @@ trait SealedPubSubBehavior<T> {
|
|||||||
/// Returns whether the channel is empty.
|
/// Returns whether the channel is empty.
|
||||||
fn is_empty(&self) -> bool;
|
fn is_empty(&self) -> bool;
|
||||||
|
|
||||||
/// Returns whether the channel is full.
|
|
||||||
fn is_full(&self) -> bool;
|
|
||||||
|
|
||||||
/// Let the channel know that a subscriber has dropped
|
/// Let the channel know that a subscriber has dropped
|
||||||
fn unregister_subscriber(&self, subscriber_next_message_id: u64);
|
fn unregister_subscriber(&self, subscriber_next_message_id: u64);
|
||||||
|
|
||||||
@ -495,9 +488,16 @@ trait SealedPubSubBehavior<T> {
|
|||||||
/// 'Middle level' behaviour of the pubsub channel.
|
/// 'Middle level' behaviour of the pubsub channel.
|
||||||
/// This trait is used so that Sub and Pub can be generic over the channel.
|
/// This trait is used so that Sub and Pub can be generic over the channel.
|
||||||
#[allow(private_bounds)]
|
#[allow(private_bounds)]
|
||||||
pub trait PubSubBehavior<T>: SealedPubSubBehavior<T> {}
|
pub trait PubSubBehavior<T>: SealedPubSubBehavior<T> {
|
||||||
|
/// Publish a message immediately
|
||||||
|
fn publish_immediate(&self, message: T);
|
||||||
|
|
||||||
impl<T, C: SealedPubSubBehavior<T>> PubSubBehavior<T> for C {}
|
/// Returns the maximum number of elements the channel can hold.
|
||||||
|
fn capacity(&self) -> usize;
|
||||||
|
|
||||||
|
/// Returns whether the channel is full.
|
||||||
|
fn is_full(&self) -> bool;
|
||||||
|
}
|
||||||
|
|
||||||
/// The result of the subscriber wait procedure
|
/// The result of the subscriber wait procedure
|
||||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user