ipc_communication/
labor.rs1#[derive(Debug, Clone, Copy)]
5pub enum LoafingResult {
6 ImDone,
8
9 TouchMeAgain,
11}
12
13pub trait Proletarian<Request, Response> {
15 fn process_request(&mut self, request: Request) -> Response;
17
18 fn loaf(&mut self) -> LoafingResult {
20 LoafingResult::ImDone
21 }
22}
23
24pub trait Socium<Request, Response> {
26 type Proletarian: Proletarian<Request, Response>;
28
29 fn construct_proletarian(&self, channel_id: usize) -> Self::Proletarian;
31}
32
33impl<F: FnMut(Req) -> Resp, Req, Resp> Proletarian<Req, Resp> for F {
34 fn process_request(&mut self, request: Req) -> Resp {
35 (self)(request)
36 }
37}
38
39impl<F, P, Req, Resp> Socium<Req, Resp> for F
40where
41 F: Fn(usize) -> P,
42 P: Proletarian<Req, Resp>,
43{
44 type Proletarian = P;
45
46 fn construct_proletarian(&self, channel_id: usize) -> Self::Proletarian {
47 (self)(channel_id)
48 }
49}