Skip to main content

dope_runtime/process/
terminal.rs

1use std::mem;
2
3use crate::{
4    process::{self, failure::bus, runtime::bus::Tx},
5    shutdown,
6};
7
8/// Reports worker failure or consumes its shutdown result.
9pub struct Terminal<'run> {
10    pub(in crate::process) source: Tx<'run>,
11}
12
13impl<'run> Terminal<'run> {
14    pub fn fail(&self) -> Result<bus::Event, bus::Fault> {
15        self.source.send(bus::Event::Failed)?;
16        Ok(bus::Event::Failed)
17    }
18
19    pub fn finish(
20        self,
21        result: shutdown::Requested<process::Shutdown<'run>>,
22    ) -> Result<bus::Event, bus::Fault> {
23        self.source.terminal(result)
24    }
25}
26
27const _: () = {
28    assert!(mem::size_of::<shutdown::Requested<process::Shutdown<'static>>>() == 0);
29    assert!(mem::size_of::<Terminal<'static>>() == mem::size_of::<usize>());
30    assert!(mem::align_of::<Terminal<'static>>() == mem::align_of::<usize>());
31    assert!(mem::size_of::<Option<Terminal<'static>>>() == mem::size_of::<usize>());
32};