Macro subcribe
Source macro_rules! subcribe {
(@sub $connect:ident, $addr:expr, $topic:expr, |$($arg:ident:$argType:ty),+|$body:block) => { ... };
(@sub $connect:ident, $addr:expr, $topic:expr, $var:expr) => { ... };
(tcp, $($var:tt)+) => { ... };
(unix, $($var:tt)+) => { ... };
}
Expand description
§订阅主题
- 第一个参数表示使用的传输协议,可选值tcp:使用tcp通信, unix:使用unix域套接字通信)
- 第二个参数为通信地址,类型为&str,例如:
"127.0.0.1:9000","/tmp/local/unix"
- 第三个参数为订阅主题,类型为&str,例如:
"onMessage"
- 第四个参数为订阅数据回调处理,支持两种格式:
|id:i32|{}),lambda回调处理,lambda函数可以有多个参数但每个参数需实现serde::de::Deserialize,另外lambda函数返回值类型为(),且lambda函数体需用{}包裹
var,var类型为**&mut**,且需要实现SubcribeCallback,T实现serde::de::Deserialize,T即为订阅的数据类型
- 返回值类型为Result<(),Error>,此订阅会一直运行只有出错时才会返回
§example
let _ = subcribe!(unix, "/tmp/local/unix", "sub", |s: String, v: i32| {
println!("({}, {})", s, v);
}).await;
struct MySub;
impl SubcribeCallback<(String, i32)> for MySub {
fn callback(&mut self, data: (String, i32)) -> bool {
false
}
}
let mut sub = MySub;
let _ = subcribe!(unix, "/tmp/local/unix", "sub", sub).await;