2019-05-10 18:59:12 +02:00
|
|
|
use crate::errors::ShellError;
|
2019-05-16 00:58:44 +02:00
|
|
|
use crate::object::{Dictionary, Value};
|
2019-05-10 18:59:12 +02:00
|
|
|
|
|
|
|
#[derive(Debug)]
|
|
|
|
pub enum FileType {
|
2019-05-15 20:14:51 +02:00
|
|
|
Directory,
|
2019-05-10 18:59:12 +02:00
|
|
|
File,
|
|
|
|
Symlink,
|
|
|
|
}
|
|
|
|
|
2019-05-15 23:44:06 +02:00
|
|
|
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)
|
2019-05-10 18:59:12 +02:00
|
|
|
}
|