nushell/src/object/files.rs
2019-05-15 14:44:06 -07:00

47 lines
1.2 KiB
Rust

use crate::errors::ShellError;
use crate::object::{DataDescriptor, Dictionary, ShellObject, Value};
use crate::MaybeOwned;
#[derive(Debug)]
pub struct DirEntry {
dict: Dictionary,
}
#[derive(Debug)]
pub enum FileType {
Directory,
File,
Symlink,
}
crate fn dir_entry_dict(entry: &std::fs::DirEntry) -> Result<Dictionary, ShellError> {
let mut dict = Dictionary::default();
let filename = entry.file_name();
dict.add("file name", Value::string(filename.to_string_lossy()));
let metadata = entry.metadata()?;
// let file_type = inner.file_type()?;
let kind = if metadata.is_dir() {
FileType::Directory
} else if metadata.is_file() {
FileType::File
} else {
FileType::Symlink
};
dict.add("file type", Value::string(format!("{:?}", kind)));
dict.add(
"readonly",
Value::boolean(metadata.permissions().readonly()),
);
dict.add("size", Value::bytes(metadata.len() as u128));
dict.add("created", Value::system_date_result(metadata.created()));
dict.add("accessed", Value::system_date_result(metadata.accessed()));
dict.add("modified", Value::system_date_result(metadata.modified()));
Ok(dict)
}