В поисках чистого способа реализовать оболочку тайм-аута на моем приемнике zmq от ржавчины. Любые общие советы по моему коду также приветствуются, это мой третий день в изучении ржавчины.
pub struct Manager {
conn: zmq::Socket,
server: String,
}
impl Manager {
pub async fn send_message(
self: &Self,
subject: String,
queue: String,
message: json::JsonValue,
) -> json::JsonValue {
let mut msg = zmq::Message::new();
let data = object! {
messageID: Ulid::new().to_string(),
requester: self.server.to_string(),
subject: subject,
queue: queue,
payload: message,
};
self.conn.send(&data.dump(), 0).unwrap();
self.conn.recv(&mut msg, 0).unwrap();
println!("Message Received {}", msg.as_str().unwrap());
match msg.as_str() {
Some(response) => json::parse(response).unwrap(),
None => json::parse(r#" { "status": "error", "error": "unable to parse data" } "#).unwrap(),
}
}
}
И затем вызывая его из другого пакета
let resp: json::JsonValue = messager
.send_message("subject".to_string(), "queue".to_string(), data)
.await;
В идеале я ищу чистый способ и i8
для моей функции вызывающей стороны, затем что-то вроде
pub async fn send_message(
self: &Self,
subject: String,
queue: String,
message: json::JsonValue,
timeout: i8, // timeout in seconds
)