Struct lunatic_message_request::MessageRequest
source · pub struct MessageRequest<Req, Res, S = Bincode>where
S: Serializer<Res>,{ /* private fields */ }Expand description
Message containing a request, allowing for a response to be sent back.
Message requests can be created using MessageRequest::new.
A message request should always have reply called,
otherwise a process could be left waiting forever for a response (unless receive_timeout is used).
Implementations§
source§impl<Req, Res, S> MessageRequest<Req, Res, S>where
S: Serializer<Res>,
impl<Req, Res, S> MessageRequest<Req, Res, S>where S: Serializer<Res>,
sourcepub fn new(req: Req) -> (Self, TaggedMailbox<Res, S>)
pub fn new(req: Req) -> (Self, TaggedMailbox<Res, S>)
Creates a new MessageRequest and TaggedMailbox.
The tagged mailbox can be used to wait for a response using TaggedMailbox::receive.
Internally, this method creates a tag which is shared between the message request and tagged mailbox.
sourcepub fn into_parts(self) -> (PendingProcess<Res, S>, Req)
pub fn into_parts(self) -> (PendingProcess<Res, S>, Req)
Splits the message request into a PendingProcess and the inner request.
This is useful if you need ownership of the inner request directly.
sourcepub fn reply(self, res: Res)where
Res: Serialize + DeserializeOwned,
pub fn reply(self, res: Res)where Res: Serialize + DeserializeOwned,
Replies to the process with a response.
Examples found in repository?
examples/counter.rs (line 21)
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
fn main() {
let counter = spawn_link!(|mailbox: Mailbox<Message>| {
let mut count = 0;
loop {
let msg = mailbox.receive();
match msg {
Message::Inc => count += 1,
Message::Dec => count -= 1,
Message::Count(req) => req.reply(count),
}
}
});
// Initial count should be 0
let count = counter.request(Message::Count, ());
assert_eq!(count, 0);
// Increment count
counter.send(Message::Inc);
// Count should now be 1
let count = counter.request(Message::Count, ());
assert_eq!(count, 1);
}Trait Implementations§
source§impl<Req: Clone, Res: Clone, S> Clone for MessageRequest<Req, Res, S>where
S: Serializer<Res> + Clone,
impl<Req: Clone, Res: Clone, S> Clone for MessageRequest<Req, Res, S>where S: Serializer<Res> + Clone,
source§fn clone(&self) -> MessageRequest<Req, Res, S>
fn clone(&self) -> MessageRequest<Req, Res, S>
Returns a copy of the value. Read more
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moresource§impl<Req: Debug, Res: Debug, S> Debug for MessageRequest<Req, Res, S>where
S: Serializer<Res> + Debug,
impl<Req: Debug, Res: Debug, S> Debug for MessageRequest<Req, Res, S>where S: Serializer<Res> + Debug,
source§impl<Req, Res, S> Deref for MessageRequest<Req, Res, S>where
S: Serializer<Res>,
impl<Req, Res, S> Deref for MessageRequest<Req, Res, S>where S: Serializer<Res>,
source§impl<Req, Res, S> DerefMut for MessageRequest<Req, Res, S>where
S: Serializer<Res>,
impl<Req, Res, S> DerefMut for MessageRequest<Req, Res, S>where S: Serializer<Res>,
source§impl<'de, Req, Res, S> Deserialize<'de> for MessageRequest<Req, Res, S>where
S: Serializer<Res>,
Req: Serialize + for<'dee> Deserialize<'dee>,
impl<'de, Req, Res, S> Deserialize<'de> for MessageRequest<Req, Res, S>where S: Serializer<Res>, Req: Serialize + for<'dee> Deserialize<'dee>,
source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where __D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
source§impl<Req: PartialEq, Res: PartialEq, S> PartialEq<MessageRequest<Req, Res, S>> for MessageRequest<Req, Res, S>where
S: Serializer<Res> + PartialEq,
impl<Req: PartialEq, Res: PartialEq, S> PartialEq<MessageRequest<Req, Res, S>> for MessageRequest<Req, Res, S>where S: Serializer<Res> + PartialEq,
source§fn eq(&self, other: &MessageRequest<Req, Res, S>) -> bool
fn eq(&self, other: &MessageRequest<Req, Res, S>) -> bool
This method tests for
self and other values to be equal, and is used
by ==.