mod common;
pub(crate) mod factory;
pub(crate) mod handler;
mod get;
mod ls;
mod mkdir;
mod put;
mod set_meta;
#[cfg(feature = "unstable-test-helpers")]
#[allow(unused_imports)] pub(crate) use get::test_shared;
use anyhow::Result;
use async_trait::async_trait;
use crate::{Parameters, client::CopyJobSpec, protocol::session::ListData};
macro_rules! error_and_return {
($stream:expr, $inner:expr) => {
return crate::session::common::send_error(&mut $stream.send, &anyhow::Error::from($inner))
.await
};
}
use error_and_return;
#[derive(Debug, Default, Copy, Clone)]
#[allow(unreachable_pub)] pub struct CommandStats {
pub payload_bytes: u64,
pub peak_transfer_rate: u64,
}
#[derive(Debug, derive_more::Constructor)]
pub struct RequestResult {
pub stats: CommandStats,
pub list: Option<ListData>,
}
impl Default for RequestResult {
fn default() -> Self {
Self {
stats: CommandStats::default(),
list: None,
}
}
}
#[async_trait]
pub(crate) trait SessionCommandImpl: Send {
async fn send(&mut self, job: &CopyJobSpec, params: Parameters) -> Result<RequestResult>;
async fn handle(&mut self) -> Result<()>;
}