update ns semantics

This commit is contained in:
yggverse 2025-06-25 10:06:01 +03:00
parent 55dfc38491
commit a238d0cd44
3 changed files with 57 additions and 51 deletions

View file

@ -1,14 +1,14 @@
mod list; mod list_config;
use crate::response::Response; use crate::response::Response;
use anyhow::{Result, bail}; use anyhow::{Result, bail};
use list::{Dir, File, List, Time}; use list_config::ListConfig;
use std::{fs, io::Read, os::unix::fs::MetadataExt, path::PathBuf, str::FromStr}; use std::{fs, io::Read, os::unix::fs::MetadataExt, path::PathBuf, str::FromStr};
/// In-session disk storage API /// In-session disk storage API
pub struct Storage { pub struct Storage {
/// Listing options /// Listing options
list: List, list_config: ListConfig,
/// Root path to storage, used also for the access validation /// Root path to storage, used also for the access validation
public_dir: PathBuf, public_dir: PathBuf,
/// Streaming buffer options /// Streaming buffer options
@ -26,25 +26,7 @@ impl Storage {
bail!("Symlinks yet not supported!"); bail!("Symlinks yet not supported!");
} }
Ok(Self { Ok(Self {
list: List { list_config: ListConfig::init(config),
dir: Dir {
time: Time {
is_accessed: config.list_dir_accessed,
is_created: config.list_dir_created,
is_modified: config.list_dir_modified,
},
is_count: config.list_dir_count,
},
file: File {
time: Time {
is_accessed: config.list_file_accessed,
is_created: config.list_file_created,
is_modified: config.list_file_modified,
},
is_size: config.list_file_size,
},
time_format: config.list_time_format.clone(),
},
public_dir, public_dir,
read_chunk: config.read_chunk, read_chunk: config.read_chunk,
}) })
@ -148,16 +130,16 @@ impl Storage {
r.push({ r.push({
let mut l = format!("=> {}/", encode(&n)); let mut l = format!("=> {}/", encode(&n));
let mut a = Vec::new(); let mut a = Vec::new();
if self.list.dir.is_count { if self.list_config.dir.is_count {
a.push(c.to_string()); a.push(c.to_string());
} }
if self.list.dir.time.is_accessed { if self.list_config.dir.time.is_accessed {
a.push(self.t(m.atime())) a.push(self.t(m.atime()))
} }
if self.list.dir.time.is_created { if self.list_config.dir.time.is_created {
a.push(self.t(m.ctime())) a.push(self.t(m.ctime()))
} }
if self.list.dir.time.is_modified { if self.list_config.dir.time.is_modified {
a.push(self.t(m.mtime())) a.push(self.t(m.mtime()))
} }
// @TODO modified, accessed, created etc. // @TODO modified, accessed, created etc.
@ -173,16 +155,16 @@ impl Storage {
r.push({ r.push({
let mut l = format!("=> {}", encode(&n)); let mut l = format!("=> {}", encode(&n));
let mut a = Vec::new(); let mut a = Vec::new();
if self.list.file.is_size { if self.list_config.file.is_size {
a.push(b(m.size())) a.push(b(m.size()))
} }
if self.list.file.time.is_accessed { if self.list_config.file.time.is_accessed {
a.push(self.t(m.atime())) a.push(self.t(m.atime()))
} }
if self.list.file.time.is_created { if self.list_config.file.time.is_created {
a.push(self.t(m.ctime())) a.push(self.t(m.ctime()))
} }
if self.list.file.time.is_modified { if self.list_config.file.time.is_modified {
a.push(self.t(m.mtime())) a.push(self.t(m.mtime()))
} }
if !a.is_empty() { if !a.is_empty() {
@ -198,7 +180,7 @@ impl Storage {
fn t(&self, u: i64) -> String { fn t(&self, u: i64) -> String {
chrono::DateTime::from_timestamp(u, 0) chrono::DateTime::from_timestamp(u, 0)
.unwrap() .unwrap()
.format(&self.list.time_format) .format(&self.list_config.time_format)
.to_string() .to_string()
} }
} }

View file

@ -1,20 +0,0 @@
pub struct Time {
pub is_accessed: bool,
pub is_created: bool,
pub is_modified: bool,
}
pub struct Dir {
pub time: Time,
pub is_count: bool,
}
pub struct File {
pub time: Time,
pub is_size: bool,
}
pub struct List {
pub dir: Dir,
pub file: File,
pub time_format: String,
}

View file

@ -0,0 +1,44 @@
pub struct Time {
pub is_accessed: bool,
pub is_created: bool,
pub is_modified: bool,
}
pub struct Dir {
pub time: Time,
pub is_count: bool,
}
pub struct File {
pub time: Time,
pub is_size: bool,
}
pub struct ListConfig {
pub dir: Dir,
pub file: File,
pub time_format: String,
}
impl ListConfig {
pub fn init(config: &crate::config::Config) -> Self {
Self {
dir: Dir {
time: Time {
is_accessed: config.list_dir_accessed,
is_created: config.list_dir_created,
is_modified: config.list_dir_modified,
},
is_count: config.list_dir_count,
},
file: File {
time: Time {
is_accessed: config.list_file_accessed,
is_created: config.list_file_created,
is_modified: config.list_file_modified,
},
is_size: config.list_file_size,
},
time_format: config.list_time_format.clone(),
}
}
}