mirror of https://github.com/sunface/rust-course
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
38 lines
1.0 KiB
38 lines
1.0 KiB
use crate::{Connection, Frame};
|
|
|
|
use tracing::{debug, instrument};
|
|
|
|
/// Represents an "unknown" command. This is not a real `Redis` command.
|
|
#[derive(Debug)]
|
|
pub struct Unknown {
|
|
command_name: String,
|
|
}
|
|
|
|
impl Unknown {
|
|
/// Create a new `Unknown` command which responds to unknown commands
|
|
/// issued by clients
|
|
pub(crate) fn new(key: impl ToString) -> Unknown {
|
|
Unknown {
|
|
command_name: key.to_string(),
|
|
}
|
|
}
|
|
|
|
/// Returns the command name
|
|
pub(crate) fn get_name(&self) -> &str {
|
|
&self.command_name
|
|
}
|
|
|
|
/// Responds to the client, indicating the command is not recognized.
|
|
///
|
|
/// This usually means the command is not yet implemented by `mini-redis`.
|
|
#[instrument(skip(self, dst))]
|
|
pub(crate) async fn apply(self, dst: &mut Connection) -> crate::Result<()> {
|
|
let response = Frame::Error(format!("ERR unknown command '{}'", self.command_name));
|
|
|
|
debug!(?response);
|
|
|
|
dst.write_frame(&response).await?;
|
|
Ok(())
|
|
}
|
|
}
|