use std::time::Duration;
use crate::storage::{
XvcStorageDeleteEvent, XvcStorageExpiringShareEvent, XvcStorageInitEvent, XvcStorageListEvent,
XvcStorageReceiveEvent, XvcStorageSendEvent,
};
use xvc_core::XvcOutputSender;
use crate::Result;
use xvc_core::{XvcCachePath, XvcRoot};
use crate::XvcStorage;
use super::XvcStorageTempDir;
pub trait XvcStorageOperations {
fn init(&mut self, output: &XvcOutputSender, xvc_root: &XvcRoot) -> Result<XvcStorageInitEvent>;
fn list(&self, output: &XvcOutputSender, xvc_root: &XvcRoot) -> Result<XvcStorageListEvent>;
fn send(
&self,
output: &XvcOutputSender,
xvc_root: &XvcRoot,
paths: &[XvcCachePath],
force: bool,
) -> Result<XvcStorageSendEvent>;
fn receive(
&self,
output: &XvcOutputSender,
xvc_root: &XvcRoot,
paths: &[XvcCachePath],
force: bool,
) -> Result<(XvcStorageTempDir, XvcStorageReceiveEvent)>;
fn delete(
&self,
output: &XvcOutputSender,
xvc_root: &XvcRoot,
paths: &[XvcCachePath],
) -> Result<XvcStorageDeleteEvent>;
fn share(
&self,
output: &XvcOutputSender,
xvc_root: &XvcRoot,
path: &XvcCachePath,
period: Duration,
) -> Result<XvcStorageExpiringShareEvent>;
}
impl XvcStorageOperations for XvcStorage {
fn init(
&mut self,
output: &XvcOutputSender,
xvc_root: &XvcRoot,
) -> Result<XvcStorageInitEvent> {
self.as_dyn_mut().init(output, xvc_root)
}
fn list(&self, output: &XvcOutputSender, xvc_root: &XvcRoot) -> Result<XvcStorageListEvent> {
self.as_dyn().list(output, xvc_root)
}
fn send(
&self,
output: &XvcOutputSender,
xvc_root: &XvcRoot,
paths: &[XvcCachePath],
force: bool,
) -> Result<XvcStorageSendEvent> {
self.as_dyn().send(output, xvc_root, paths, force)
}
fn receive(
&self,
output: &XvcOutputSender,
xvc_root: &XvcRoot,
paths: &[XvcCachePath],
force: bool,
) -> Result<(XvcStorageTempDir, XvcStorageReceiveEvent)> {
self.as_dyn().receive(output, xvc_root, paths, force)
}
fn delete(
&self,
output: &XvcOutputSender,
xvc_root: &XvcRoot,
paths: &[XvcCachePath],
) -> Result<XvcStorageDeleteEvent> {
self.as_dyn().delete(output, xvc_root, paths)
}
fn share(
&self,
output: &XvcOutputSender,
xvc_root: &XvcRoot,
path: &XvcCachePath,
period: Duration,
) -> Result<XvcStorageExpiringShareEvent> {
self.as_dyn().share(output, xvc_root, path, period)
}
}