1use std::io;
2use std::sync::mpsc;
3use std::thread;
4
5use ei;
6
7fn main() {
8 let (sender, receiver) = mpsc::channel::<Vec<u8>>();
9
10 let mut writer = ei::Writer::new(io::stdout());
12
13 thread::spawn(move || {
14 while let Ok(vec) = receiver.recv() {
15 writer.send(vec.as_slice()).unwrap()
16 }
17 });
18
19 let mut reader = ei::Reader::new(io::stdin());
21
22 while let Ok(vec) = reader.recv() {
23 let s = sender.clone();
24 thread::spawn(move || {
25 let req: (u8, i64, i64, ei::Pid, ei::Atom, ei::Ref) =
26 ei::deserialize!(vec.as_slice()).unwrap();
27
28 let res = match req.0 {
29 0x61 => {
30 let res = (ei::atom!("ok"), add(req.1, req.2), req.3, req.4, req.5);
31 ei::serialize!(&res).unwrap()
32 }
33 0x73 => {
34 let res = (ei::atom!("ok"), sub(req.1, req.2), req.3, req.4, req.5);
35 ei::serialize!(&res).unwrap()
36 }
37 _ => {
38 let res = (ei::atom!("error"), ei::atom!("undef"), req.3, req.4, req.5);
39 ei::serialize!(&res).unwrap()
40 }
41 };
42
43 s.send(res).unwrap();
44 });
45 }
46}
47
48fn add(v1: i64, v2: i64) -> i64 {
49 v1 + v2
50}
51
52fn sub(v1: i64, v2: i64) -> i64 {
53 v1 - v2
54}