Compare commits
1 commit
425d166517
...
f2315636da
Author | SHA1 | Date | |
---|---|---|---|
f2315636da |
4 changed files with 22 additions and 16 deletions
8
justfile
8
justfile
|
@ -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:
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue