use crate::{
auth::UserDetail,
server::controlchan::{
Reply, ReplyCode,
error::ControlChanError,
handler::{CommandContext, CommandHandler},
},
storage::{Metadata, StorageBackend},
};
use async_trait::async_trait;
#[derive(Debug)]
pub struct Pwd;
#[async_trait]
impl<Storage, User> CommandHandler<Storage, User> for Pwd
where
User: UserDetail + 'static,
Storage: StorageBackend<User> + 'static,
Storage::Metadata: Metadata,
{
#[tracing_attributes::instrument]
async fn handle(&self, args: CommandContext<Storage, User>) -> Result<Reply, ControlChanError> {
let session = args.session.lock().await;
let result = format!("\"{}\"", session.cwd.as_path().display());
#[cfg(windows)]
let result = result.replace(std::path::MAIN_SEPARATOR, "/");
Ok(Reply::new_with_string(ReplyCode::DirCreated, result))
}
}