use std::{
io::{Error, SeekFrom},
path::{Path, PathBuf},
};
use crate::{
dir_entry::DirEntry,
file::{File, FileInner},
metadata::Metadata,
open_options::OpenOptions,
walkdir::{WalkDir, WalkdirIterator, WalkdirIteratorInner},
};
pub trait Diskit: Clone + Default + 'static
{
fn set_pwd_inner(&self, path: &Path) -> Result<(), Error>;
fn get_pwd(&self) -> Result<PathBuf, Error>;
fn open_inner(&self, path: &Path) -> Result<File<Self>, Error>;
fn create_inner(&self, path: &Path) -> Result<File<Self>, Error>;
fn open_with_options_inner(
&self,
path: &Path,
options: OpenOptions,
) -> Result<File<Self>, Error>;
fn read_inner(&self, file: &FileInner, buf: &mut [u8]) -> Result<usize, Error>;
fn read_to_end_inner(&self, file: &mut FileInner, buf: &mut Vec<u8>) -> Result<usize, Error>;
fn read_to_string_inner(&self, file: &mut FileInner, buf: &mut String) -> Result<usize, Error>;
fn write_inner(&self, file: &mut FileInner, buf: &[u8]) -> Result<usize, Error>;
fn write_all_inner(&self, file: &mut FileInner, buf: &[u8]) -> Result<(), Error>;
fn flush_inner(&self, file: &mut FileInner) -> Result<(), Error>;
fn metadata_inner(&self, file: &FileInner) -> Result<Metadata, Error>;
fn seek_inner(&self, file: &mut FileInner, pos: SeekFrom) -> Result<u64, Error>;
fn create_dir_inner(&self, path: &Path) -> Result<(), Error>;
fn create_dir_all_inner(&self, path: &Path) -> Result<(), Error>;
fn close_inner(&self, file: FileInner) -> Result<(), Error>;
fn walkdir_inner(&self, path: &Path) -> WalkDir<Self>;
#[allow(clippy::wrong_self_convention)]
fn into_walkdir_iterator(&self, walkdir: WalkDir<Self>) -> WalkdirIterator<Self>;
fn walkdir_next_inner(
&self,
inner: &mut WalkdirIteratorInner,
) -> Option<Result<DirEntry, Error>>;
#[cfg(feature = "trash")]
fn trash_delete_inner(&self, path: &Path) -> Result<(), trash::Error>;
}