pub struct ChannelEnd {
pub id: KernelObjectId,
pub owner: KernelObjectId,
pub messages: Spinlock<VecDeque<Message>>,
/* private fields */
}
Fields§
§id: KernelObjectId
§owner: KernelObjectId
§messages: Spinlock<VecDeque<Message>>
Implementations§
Source§impl ChannelEnd
impl ChannelEnd
pub fn new_channel(owner: KernelObjectId) -> (Arc<ChannelEnd>, Arc<ChannelEnd>)
pub fn new_kernel_channel(owner: KernelObjectId) -> Arc<ChannelEnd>
Sourcepub fn add_message(&self, message: Message)
pub fn add_message(&self, message: Message)
Add a message to this ChannelEnd
. Use send
if you want to send a message through this
ChannelEnd
(i.e. to the other end of the Channel).
Sourcepub fn send(&self, message: Message) -> Result<(), SendMessageError>
pub fn send(&self, message: Message) -> Result<(), SendMessageError>
Send a message through this ChannelEnd
, to be received by the other end. If this is a kernel channel, the
message is discarded.
Sourcepub fn receive<F, R>(&self, f: F) -> Result<R, GetMessageError>
pub fn receive<F, R>(&self, f: F) -> Result<R, GetMessageError>
Try to “receive” a message from this ChannelEnd
, potentially removing it from the queue. Note that this
keeps a lock over the message queue while the passed function is called - if the handling of the message
fails (for example, the buffer to put it into is too small), the passed function can return it with
Err((message, some_error))
, and the message will be placed back into the queue (preserving message
order), and the error will be returned.
Trait Implementations§
Source§impl Debug for ChannelEnd
impl Debug for ChannelEnd
Source§impl KernelObject for ChannelEnd
impl KernelObject for ChannelEnd
fn id(&self) -> KernelObjectId
fn typ(&self) -> KernelObjectType
Auto Trait Implementations§
impl !Freeze for ChannelEnd
impl !RefUnwindSafe for ChannelEnd
impl Send for ChannelEnd
impl Sync for ChannelEnd
impl Unpin for ChannelEnd
impl !UnwindSafe for ChannelEnd
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Convert
Box<Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can then be
further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Convert
Rc<Trait>
(where Trait: Downcast
) to Rc<dyn Any>
. Rc<dyn Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
Convert
&Trait
(where Trait: Downcast
) to &Anydyn Any
. This is needed since Rust cannot
generate &Anydyn Any
’s vtable from &Trait
’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Convert
&mut Trait
(where Trait: Downcast
) to &Anydyn Any
. This is needed since Rust cannot
generate &mut dyn Any
’s vtable from &mut Trait
’s.