提交 0aa33595 编写于 作者: B Benjamin Sago

Use the optional argument trick

上级 31148eda
......@@ -114,10 +114,10 @@ impl<'dir> Files<'dir> {
fn next_visible_file(&mut self) -> Option<Result<File<'dir>, (PathBuf, io::Error)>> {
loop {
if let Some(path) = self.inner.next() {
let filen = File::filename(path);
if !self.dotfiles && filen.starts_with(".") { continue }
let filename = File::filename(path);
if !self.dotfiles && filename.starts_with(".") { continue }
return Some(File::new(path.clone(), Some(self.dir), Some(filen))
return Some(File::new(path.clone(), self.dir, filename)
.map_err(|e| (path.clone(), e)))
}
else {
......@@ -148,12 +148,12 @@ impl<'dir> Iterator for Files<'dir> {
fn next(&mut self) -> Option<Self::Item> {
if let Dots::DotNext = self.dots {
self.dots = Dots::DotDotNext;
Some(File::new(self.dir.path.to_path_buf(), Some(self.dir), Some(String::from(".")))
Some(File::new(self.dir.path.to_path_buf(), self.dir, String::from("."))
.map_err(|e| (Path::new(".").to_path_buf(), e)))
}
else if let Dots::DotDotNext = self.dots {
self.dots = Dots::FilesNext;
Some(File::new(self.parent(), Some(self.dir), Some(String::from("..")))
Some(File::new(self.parent(), self.dir, String::from(".."))
.map_err(|e| (self.parent(), e)))
}
else {
......
......@@ -57,15 +57,16 @@ pub struct File<'dir> {
}
impl<'dir> File<'dir> {
pub fn new(path: PathBuf, parent_dir: Option<&'dir Dir>, mut filename: Option<String>) -> IOResult<File<'dir>> {
if filename.is_none() {
filename = Some(File::filename(&path));
}
let metadata = fs::symlink_metadata(&path)?;
let ext = File::ext(&path);
Ok(File { path, parent_dir, metadata, ext, name: filename.unwrap() })
pub fn new<PD, FN>(path: PathBuf, parent_dir: PD, filename: FN) -> IOResult<File<'dir>>
where PD: Into<Option<&'dir Dir>>,
FN: Into<Option<String>>
{
let parent_dir = parent_dir.into();
let metadata = fs::symlink_metadata(&path)?;
let name = filename.into().unwrap_or_else(|| File::filename(&path));
let ext = File::ext(&path);
Ok(File { path, parent_dir, metadata, ext, name })
}
/// A file’s name is derived from its string. This needs to handle directories
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册