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 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,
pub skipped_files: 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,
}
}
}
pub(crate) trait SessionCommandImpl: Send {
fn send<'a>(
&'a mut self,
job: &'a CopyJobSpec,
params: Parameters,
) -> std::pin::Pin<Box<dyn std::future::Future<Output = Result<RequestResult>> + Send + 'a>>;
fn handle<'a>(
&'a mut self,
) -> std::pin::Pin<Box<dyn std::future::Future<Output = Result<()>> + Send + 'a>>;
}