use crate::serializer::CanSerialize;
use crate::{Process, Tag};
#[derive(serde::Serialize, serde::Deserialize)]
#[serde(bound = "")]
pub(crate) struct ReturnAddress<Response, Serializer> {
process: Process<Response, Serializer>,
}
impl<Response, Serializer> ReturnAddress<Response, Serializer>
where
Serializer: CanSerialize<Response>,
{
pub(crate) fn from_self() -> Self {
let process = unsafe { Process::this() };
ReturnAddress { process }
}
pub(crate) fn send_response(self, response: Response, tag: Tag) {
self.process.tag_send(tag, response);
}
}
pub(crate) const SHUTDOWN_HANDLER: u8 = 32;
#[derive(serde::Serialize, serde::Deserialize)]
#[serde(bound = "")]
pub struct ShutdownMessage<Serializer>(pub(crate) ReturnAddress<(), Serializer>);
#[derive(serde::Serialize, serde::Deserialize)]
pub struct RequestMessage<T, Response, Serializer>(
pub(crate) T,
#[serde(bound = "")] pub(crate) ReturnAddress<Response, Serializer>,
);