1use serde_::{Deserialize, Serialize};
2use unix_ipc::{channel, Bootstrapper, Receiver, Sender};
3
4#[derive(Serialize, Deserialize, Debug)]
5#[serde(crate = "serde_")]
6pub enum Task {
7 Sum(Vec<i64>, Sender<i64>),
8 Shutdown,
9}
10
11fn main() {
12 let bootstrapper = Bootstrapper::new().unwrap();
13 let path = bootstrapper.path().to_owned();
14
15 std::thread::spawn(move || {
16 let receiver = Receiver::<Task>::connect(path).unwrap();
17 loop {
18 let task = receiver.recv().unwrap();
19 match task {
20 Task::Sum(values, tx) => {
21 tx.send(values.into_iter().sum::<i64>()).unwrap();
22 }
23 Task::Shutdown => break,
24 }
25 }
26 });
27
28 println!("make channel 1");
29 let (tx, rx) = channel().unwrap();
30 bootstrapper.send(Task::Sum(vec![23, 42], tx)).unwrap();
31 println!("result: {}", rx.recv().unwrap());
32
33 println!("make channel 2");
34 let (tx, rx) = channel().unwrap();
35 bootstrapper.send(Task::Sum(vec![1, 2, 3], tx)).unwrap();
36 println!("result: {}", rx.recv().unwrap());
37
38 bootstrapper.send(Task::Shutdown).unwrap();
39}