use std::path::PathBuf;
use tokio::io::{AsyncRead, AsyncWrite};
#[async_trait::async_trait]
pub trait SharedFileType: AsyncRead + AsyncWrite {
type Type;
type OpenError;
type SyncError;
async fn open_ro(&self) -> Result<Self::Type, Self::OpenError>;
async fn open_rw(&self) -> Result<Self::Type, Self::OpenError>;
async fn sync_all(&self) -> Result<(), Self::SyncError>;
async fn sync_data(&self) -> Result<(), Self::SyncError>;
}
#[async_trait::async_trait]
pub trait AsyncNewFile {
type Target;
type Error;
async fn new_async() -> Result<Self::Target, Self::Error>;
}
pub trait NewFile {
type Target;
type Error;
fn new() -> Result<Self::Target, Self::Error>;
}
pub trait FilePath {
fn file_path(&self) -> &PathBuf;
}