add pub/sub cli (#91)
Signed-off-by: Liang Zheng <zhengliang0901@gmail.com>
This commit is contained in:
@@ -39,6 +39,20 @@ enum Command {
|
|||||||
#[structopt(parse(try_from_str = duration_from_ms_str))]
|
#[structopt(parse(try_from_str = duration_from_ms_str))]
|
||||||
expires: Option<Duration>,
|
expires: Option<Duration>,
|
||||||
},
|
},
|
||||||
|
/// Publisher to send a message to a specific channel.
|
||||||
|
Publish {
|
||||||
|
/// Name of channel
|
||||||
|
channel: String,
|
||||||
|
|
||||||
|
#[structopt(parse(from_str = bytes_from_str))]
|
||||||
|
/// Message to publish
|
||||||
|
message: Bytes,
|
||||||
|
},
|
||||||
|
/// Subscribe a client to a specific channel or channels.
|
||||||
|
Subscribe {
|
||||||
|
/// Specific channel or channels
|
||||||
|
channels: Vec<String>,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Entry point for CLI tool.
|
/// Entry point for CLI tool.
|
||||||
@@ -93,6 +107,24 @@ async fn main() -> mini_redis::Result<()> {
|
|||||||
client.set_expires(&key, value, expires).await?;
|
client.set_expires(&key, value, expires).await?;
|
||||||
println!("OK");
|
println!("OK");
|
||||||
}
|
}
|
||||||
|
Command::Publish { channel, message } => {
|
||||||
|
client.publish(&channel, message.into()).await?;
|
||||||
|
println!("Publish OK");
|
||||||
|
}
|
||||||
|
Command::Subscribe { channels } => {
|
||||||
|
if channels.is_empty() {
|
||||||
|
return Err("channel(s) must be provided".into());
|
||||||
|
}
|
||||||
|
let mut subscriber = client.subscribe(channels).await?;
|
||||||
|
|
||||||
|
// await messages on channels
|
||||||
|
while let Some(msg) = subscriber.next_message().await? {
|
||||||
|
println!(
|
||||||
|
"got message from the channel: {}; message = {:?}",
|
||||||
|
msg.channel, msg.content
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|||||||
Reference in New Issue
Block a user