Add doc about Ping cmd to README, change the internal data type of Ping cmd to Bytes, and rm unnecessary reference (#118)
This commit is contained in:
1
Cargo.lock
generated
1
Cargo.lock
generated
@@ -510,7 +510,6 @@ dependencies = [
|
||||
"tokio",
|
||||
"tokio-stream",
|
||||
"tracing",
|
||||
"tracing-futures",
|
||||
"tracing-opentelemetry",
|
||||
"tracing-subscriber",
|
||||
]
|
||||
|
||||
@@ -29,7 +29,6 @@ clap = { version = "3.1.18", features = ["derive"] }
|
||||
tokio = { version = "1", features = ["full"] }
|
||||
tokio-stream = "0.1"
|
||||
tracing = "0.1.34"
|
||||
tracing-futures = { version = "0.2.3" }
|
||||
tracing-subscriber = { version = "0.3.11", features = ["env-filter"] }
|
||||
# Implements the types defined in the OTel spec
|
||||
opentelemetry = { version = "0.17.0", optional = true }
|
||||
|
||||
@@ -88,6 +88,7 @@ https://github.com/aws-observability/aws-otel-collector/blob/main/docs/developer
|
||||
|
||||
`mini-redis` currently supports the following commands.
|
||||
|
||||
* [PING](https://redis.io/commands/ping)
|
||||
* [GET](https://redis.io/commands/get)
|
||||
* [SET](https://redis.io/commands/set)
|
||||
* [PUBLISH](https://redis.io/commands/publish)
|
||||
|
||||
@@ -28,7 +28,8 @@ struct Cli {
|
||||
enum Command {
|
||||
Ping {
|
||||
/// Message to ping
|
||||
msg: Option<String>,
|
||||
#[clap(parse(from_str = bytes_from_str))]
|
||||
msg: Option<Bytes>,
|
||||
},
|
||||
/// Get the value of key.
|
||||
Get {
|
||||
|
||||
@@ -110,7 +110,7 @@ impl Client {
|
||||
/// }
|
||||
/// ```
|
||||
#[instrument(skip(self))]
|
||||
pub async fn ping(&mut self, msg: Option<String>) -> crate::Result<Bytes> {
|
||||
pub async fn ping(&mut self, msg: Option<Bytes>) -> crate::Result<Bytes> {
|
||||
let frame = Ping::new(msg).into_frame();
|
||||
debug!(request = ?frame);
|
||||
|
||||
@@ -459,7 +459,7 @@ impl Subscriber {
|
||||
/// Unsubscribe to a list of new channels
|
||||
#[instrument(skip(self))]
|
||||
pub async fn unsubscribe(&mut self, channels: &[String]) -> crate::Result<()> {
|
||||
let frame = Unsubscribe::new(&channels).into_frame();
|
||||
let frame = Unsubscribe::new(channels).into_frame();
|
||||
|
||||
debug!(request = ?frame);
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
use crate::{Connection, Frame, Parse, ParseError};
|
||||
use bytes::Bytes;
|
||||
use tracing::instrument;
|
||||
use tracing::{debug, instrument};
|
||||
|
||||
/// Returns PONG if no argument is provided, otherwise
|
||||
/// return a copy of the argument as a bulk.
|
||||
@@ -10,12 +10,12 @@ use tracing::instrument;
|
||||
#[derive(Debug, Default)]
|
||||
pub struct Ping {
|
||||
/// optional message to be returned
|
||||
msg: Option<String>,
|
||||
msg: Option<Bytes>,
|
||||
}
|
||||
|
||||
impl Ping {
|
||||
/// Create a new `Ping` command with optional `msg`.
|
||||
pub fn new(msg: Option<String>) -> Ping {
|
||||
pub fn new(msg: Option<Bytes>) -> Ping {
|
||||
Ping { msg }
|
||||
}
|
||||
|
||||
@@ -40,7 +40,7 @@ impl Ping {
|
||||
/// PING [message]
|
||||
/// ```
|
||||
pub(crate) fn parse_frames(parse: &mut Parse) -> crate::Result<Ping> {
|
||||
match parse.next_string() {
|
||||
match parse.next_bytes() {
|
||||
Ok(msg) => Ok(Ping::new(Some(msg))),
|
||||
Err(ParseError::EndOfStream) => Ok(Ping::default()),
|
||||
Err(e) => Err(e.into()),
|
||||
@@ -55,9 +55,11 @@ impl Ping {
|
||||
pub(crate) async fn apply(self, dst: &mut Connection) -> crate::Result<()> {
|
||||
let response = match self.msg {
|
||||
None => Frame::Simple("PONG".to_string()),
|
||||
Some(msg) => Frame::Bulk(Bytes::from(msg)),
|
||||
Some(msg) => Frame::Bulk(msg),
|
||||
};
|
||||
|
||||
debug!(?response);
|
||||
|
||||
// Write the response back to the client
|
||||
dst.write_frame(&response).await?;
|
||||
|
||||
@@ -72,7 +74,7 @@ impl Ping {
|
||||
let mut frame = Frame::array();
|
||||
frame.push_bulk(Bytes::from("ping".as_bytes()));
|
||||
if let Some(msg) = self.msg {
|
||||
frame.push_bulk(Bytes::from(msg));
|
||||
frame.push_bulk(msg);
|
||||
}
|
||||
frame
|
||||
}
|
||||
|
||||
@@ -21,7 +21,7 @@ async fn ping_pong_with_message() {
|
||||
let (addr, _) = start_server().await;
|
||||
let mut client = client::connect(addr).await.unwrap();
|
||||
|
||||
let pong = client.ping(Some("你好世界".to_string())).await.unwrap();
|
||||
let pong = client.ping(Some("你好世界".into())).await.unwrap();
|
||||
assert_eq!("你好世界".as_bytes(), &pong[..]);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user