Compare commits

..

1 commit

Author SHA1 Message Date
f2315636da feat(fs): add .reader().bytes() 2024-11-03 11:53:22 +00:00
4 changed files with 22 additions and 16 deletions

View file

@ -1,11 +1,9 @@
build: build:
#!/usr/bin/env bash
set -e
cargo fmt cargo fmt
cargo fmt --check cargo fmt --check
cargo hack clippy cargo hack --feature-powerset clippy
cargo hack build cargo hack --feature-powerset build
cargo hack test cargo hack --feature-powerset test
cargo doc cargo doc
install-hooks: install-hooks:

View file

@ -2,7 +2,8 @@
use crate::fs::{DirItem, DirItemIterator, Result}; use crate::fs::{DirItem, DirItemIterator, Result};
use super::{ use super::{
DirHandle, Error, FileHandle, PathHandle, path::{DirMarker, PathReal},
DirHandle, Error, FileMarker, PathMarker,
}; };
impl<'base, 'path> DirHandle<'base, 'path> { impl<'base, 'path> DirHandle<'base, 'path> {
@ -61,10 +62,14 @@ impl<'base, 'path> DirHandle<'base, 'path> {
Ok(Box::new(DirItemIterator::new(read_dir))) Ok(Box::new(DirItemIterator::new(read_dir)))
} }
} }
impl<'base, 'path> TryFrom<PathHandle<'base, 'path>> for FileHandle<'base, 'path> { impl<'base, 'path> TryFrom<PathReal<'base, 'path, PathMarker>>
for PathReal<'base, 'path, FileMarker>
{
type Error = crate::fs::Error; type Error = crate::fs::Error;
fn try_from(path: PathHandle<'base, 'path>) -> std::result::Result<Self, Self::Error> { fn try_from(
path: PathReal<'base, 'path, PathMarker>,
) -> std::result::Result<Self, Self::Error> {
match path.as_file() { match path.as_file() {
Ok(Some(dir)) => Ok(dir.clone()), Ok(Some(dir)) => Ok(dir.clone()),
Ok(None) => Err(crate::fs::Error::NotADirectory { Ok(None) => Err(crate::fs::Error::NotADirectory {
@ -74,10 +79,14 @@ impl<'base, 'path> TryFrom<PathHandle<'base, 'path>> for FileHandle<'base, 'path
} }
} }
} }
impl<'base, 'path> TryFrom<PathHandle<'base, 'path>> for DirHandle<'base, 'path> { impl<'base, 'path> TryFrom<PathReal<'base, 'path, PathMarker>>
for PathReal<'base, 'path, DirMarker>
{
type Error = crate::fs::Error; type Error = crate::fs::Error;
fn try_from(path: PathHandle<'base, 'path>) -> std::result::Result<Self, Self::Error> { fn try_from(
path: PathReal<'base, 'path, PathMarker>,
) -> std::result::Result<Self, Self::Error> {
match path.as_dir() { match path.as_dir() {
Ok(Some(dir)) => Ok(dir.clone()), Ok(Some(dir)) => Ok(dir.clone()),
Ok(None) => Err(crate::fs::Error::NotADirectory { Ok(None) => Err(crate::fs::Error::NotADirectory {

View file

@ -2,6 +2,7 @@
use crate::fs::Result; use crate::fs::Result;
use super::{ use super::{
path::{FileMarker, PathReal},
reader::Reader, reader::Reader,
Error, FileHandle, Error, FileHandle,
}; };
@ -57,7 +58,7 @@ impl<'base, 'path> FileHandle<'base, 'path> {
/// # Ok(()) /// # Ok(())
/// # } /// # }
/// ``` /// ```
pub fn copy(&self, dest: &FileHandle<'base, 'path>) -> Result<u64> { pub fn copy(&self, dest: &PathReal<'base, 'path, FileMarker>) -> Result<u64> {
self.check_error()?; self.check_error()?;
std::fs::copy(self.as_pathbuf(), dest.as_pathbuf()).map_err(Error::Io) std::fs::copy(self.as_pathbuf(), dest.as_pathbuf()).map_err(Error::Io)
} }

View file

@ -6,8 +6,6 @@ use std::{
use crate::fs::{Error, Result}; use crate::fs::{Error, Result};
use super::{DirHandle, FileHandle, PathHandle};
/// Marker trait for the type of [PathReal]. /// Marker trait for the type of [PathReal].
pub trait PathType {} pub trait PathType {}
@ -172,7 +170,7 @@ impl<'base, 'path, T: PathType> PathReal<'base, 'path, T> {
/// # Ok(()) /// # Ok(())
/// # } /// # }
/// ``` /// ```
pub fn as_dir(&self) -> Result<Option<DirHandle<'base, 'path>>> { pub fn as_dir(&self) -> Result<Option<PathReal<'base, 'path, DirMarker>>> {
self.check_error()?; self.check_error()?;
if self.as_pathbuf().is_dir() { if self.as_pathbuf().is_dir() {
Ok(Some(PathReal::new(self.base, self.path))) Ok(Some(PathReal::new(self.base, self.path)))
@ -195,7 +193,7 @@ impl<'base, 'path, T: PathType> PathReal<'base, 'path, T> {
/// # Ok(()) /// # Ok(())
/// # } /// # }
/// ``` /// ```
pub fn as_file(&self) -> Result<Option<FileHandle<'base, 'path>>> { pub fn as_file(&self) -> Result<Option<PathReal<'base, 'path, FileMarker>>> {
self.check_error()?; self.check_error()?;
if self.as_pathbuf().is_file() { if self.as_pathbuf().is_file() {
Ok(Some(PathReal::new(self.base, self.path))) Ok(Some(PathReal::new(self.base, self.path)))
@ -204,7 +202,7 @@ impl<'base, 'path, T: PathType> PathReal<'base, 'path, T> {
} }
} }
} }
impl<'base, 'path> From<PathHandle<'base, 'path>> for PathBuf { impl From<PathReal<'_, '_, PathMarker>> for PathBuf {
fn from(path: PathReal<PathMarker>) -> Self { fn from(path: PathReal<PathMarker>) -> Self {
path.base.join(path.path) path.base.join(path.path)
} }