macro_rules! call {
(@call $connect:ident, $addr:expr, $func:ident()) => { ... };
(@call $connect:ident, $addr:expr, $func:ident() -> $ret:ty) => { ... };
(@call $connect:ident, $addr:expr, $func:ident($($arg:expr),+)) => { ... };
(@call $connect:ident, $addr:expr, $func:ident($($arg:expr),+) -> $ret:ty) => { ... };
(tcp, $($var:tt)+) => { ... };
(unix, $($var:tt)+) => { ... };
}Expand description
- 第一个参数表示使用的传输协议,可选值tcp:使用tcp通信, unix:使用unix域套接字通信)
- 第二个参数为通信地址,类型为&str,例如:
"127.0.0.1:9000","/tmp/local/unix"
- 剩下的参数为函数调用,格式如下所示:
rpc1(),无参数无返回值
rpc2(id:i32),有参数无返回值
rpc3()->i32,无参数有返回值
rpc4(a:i32,b:bool)->String,既有参数也有返回值
- 返回值类型为Result<R,Error>,R为返回值类型,当无返回值时R为()
let _ = call!(unix, "/tmp/local/unix", test_notargs_and_notret()).await?;
let _ = call!(unix, "/tmp/local/unix", test_notret("hello client")).await?;
let ret = call!(tcp, "127.0.0.1:9000", test_notargs() -> String).await?;
assert_eq!(&ret, "test_notargs called!");
let ret = call!(tcp, "127.0.0.1:9000", test_has_args_and_ret(10000, 1000, 10, true) -> String).await?;
assert_eq!(&ret, "10000 1000 10 true");