Struct mesh_channel::Sender

source ·
pub struct Sender<T>(/* private fields */);
Expand description

The sending half of a channel returned by channel.

Implementations§

source§

impl<T: MeshField> Sender<T>

source

pub fn upcast<U: MeshField>(self) -> Sender<U>
where Self: Upcast<Sender<U>>,

Upcasts this sender to one that can send values whose encoding is a subset of T’s.

let (send, mut recv) = channel::<Option<mesh_node::message::Message>>();
let send = send.upcast::<Option<(u32, u16)>>();
send.send(None);
send.send(Some((5, 4)));
assert!(block_on(recv.recv()).unwrap().is_none());
assert!(block_on(recv.recv()).unwrap().is_some());
source

pub fn force_downcast<U: MeshField>(self) -> Sender<U>
where Sender<U>: Upcast<Self>,

Downcasts this sender to one that can send values whose encoding is a superset of T’s.

Although this is memory safe, it can cause the receiver to see message decoding errors.

source§

impl<T: 'static + Send> Sender<T>

source

pub fn send(&self, msg: T)

Sends a message to the associated Receiver<T>.

Does not return a result, so messages can be silently dropped if the receiver has closed or failed. To detect such conditions, include another sender in the message you send so that the receiving thread can use it to send a response.

let (send, mut recv) = channel();
let (response_send, mut response_recv) = channel::<bool>();
send.send((3, response_send));
let (val, response_send) = recv.recv().await.unwrap();
response_send.send(val == 3);
assert_eq!(response_recv.recv().await.unwrap(), true);
source

pub fn bridge(self, recv: Receiver<T>)

Bridges this and recv together, consuming both self and recv. This makes it so that anything sent to recv will be directly sent to this channel’s peer receiver, without a separate relay step. This includes any data that was previously sent but not yet consumed.

let (outer_send, inner_recv) = channel::<u32>();
let (inner_send, mut outer_recv) = channel::<u32>();

outer_send.send(2);
inner_send.send(1);
inner_send.bridge(inner_recv);
assert_eq!(outer_recv.try_recv().unwrap(), 1);
assert_eq!(outer_recv.try_recv().unwrap(), 2);
source

pub fn is_closed(&self) -> bool

Returns whether the receiving side of the channel is known to be closed (or failed).

This is useful to determine if there is any point in sending more data via this port. But even if this returns false messages may still fail to reach the destination.

Trait Implementations§

source§

impl<T> Debug for Sender<T>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<T> DefaultEncoding for Sender<T>
where T: MeshField,

source§

type Encoding = TableEncoder

The encoding to use for the serialization. Read more
source§

impl<T: MeshField> From<Port> for Sender<T>

source§

fn from(port: Port) -> Self

Converts to this type from the input type.
source§

impl<T: MeshField> From<Sender<T>> for Port

source§

fn from(v: Sender<T>) -> Self

Converts to this type from the input type.
source§

impl<T: 'static + Send> RpcSend for Sender<T>

source§

type Message = T

The message type for this sender.
source§

fn send_rpc(&self, message: T)

Send an RPC request.
source§

fn call<F, I, R>(&self, f: F, input: I) -> OneshotReceiver<R>
where F: FnOnce(Rpc<I, R>) -> Self::Message, R: 'static + Send,

Issues a request and returns a channel to receive the result. Read more
source§

fn call_failable<F, I, T, E>( &self, f: F, input: I, ) -> RpcResultReceiver<Result<T, E>>
where F: FnOnce(Rpc<I, Result<T, E>>) -> Self::Message, T: 'static + Send, E: 'static + Send,

Issues a request and returns an object to receive the result. Read more
source§

impl<'encoding, T> StructDecodeMetadata<'encoding, Resource> for Sender<T>
where T: MeshField,

source§

const DECODERS: &'static [ErasedDecoderEntry] = _

The list of decoder vtables.
source§

impl<T> StructEncodeMetadata<Resource> for Sender<T>
where T: MeshField,

source§

const ENCODERS: &'static [ErasedEncoderEntry] = _

The list of encoder vtables.
source§

impl<T> StructMetadata for Sender<T>
where T: MeshField,

source§

const NUMBERS: &'static [u32] = _

The field numbers for each field.
source§

const OFFSETS: &'static [usize] = _

The byte offset to each field within the struct.
source§

impl<T: MeshField, U: MeshField> Downcast<Sender<U>> for Sender<T>
where (U,): Downcast<(T,)>,

Auto Trait Implementations§

§

impl<T> Freeze for Sender<T>

§

impl<T> !RefUnwindSafe for Sender<T>

§

impl<T> Send for Sender<T>

§

impl<T> Sync for Sender<T>

§

impl<T> Unpin for Sender<T>

§

impl<T> !UnwindSafe for Sender<T>

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> SerializeMessage for T
where T: MeshPayload,

source§

type Concrete = T

The underlying concrete message type.
source§

fn compute_message_size(&mut self, sizer: MessageSizer<'_>)

Computes the message size, as in MessageEncode::compute_message_size.
source§

fn write_message(self, writer: MessageWriter<'_, '_, Resource>)

Writes the message, as in MessageEncode::write_message.
source§

fn extract(self) -> <T as SerializeMessage>::Concrete

Extract the concrete message.
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

impl<T, U> Upcast<U> for T
where U: Downcast<T>,