Add new subcommand list

Also add it to the readme and manpage.
This commit is contained in:
finga 2021-07-07 18:27:41 +02:00
parent 12b117db7e
commit 4020f062ef
5 changed files with 90 additions and 6 deletions

View file

@ -7,6 +7,7 @@ mod posix;
enum Command {
Create(posix::Create),
Info(posix::Info),
List(posix::List),
Unlink(posix::Unlink),
Send(posix::Send),
Recv(posix::Recv),
@ -47,6 +48,7 @@ fn main() -> Result<()> {
Command::Unlink(u) => u.run()?,
Command::Send(s) => s.run()?,
Command::Recv(r) => r.run()?,
Command::List(l) => l.run()?,
}
Ok(())

View file

@ -1,11 +1,13 @@
mod create;
mod info;
mod list;
mod recv;
mod send;
mod unlink;
pub use create::Create;
pub use info::Info;
pub use list::List;
pub use recv::Recv;
pub use send::Send;
pub use unlink::Unlink;

58
src/posix/list.rs Normal file
View file

@ -0,0 +1,58 @@
use anyhow::{anyhow, Result};
use chrono::{DateTime, Local};
use clap::Clap;
use log::warn;
use std::{fs, os::unix::fs::PermissionsExt};
/// Print information about an existing message queue
#[derive(Clap, Debug)]
pub struct List {
/// Show all parameters
#[clap(short, long)]
all: bool,
}
impl List {
pub fn run(&self) -> Result<()> {
match self.all {
false => println!("Name"),
true => println!(
"{0: <10} {1: <10} {2: <12} {3: <26} {4: <26}",
"Name", "Size", "Permissions", "Modified", "Accessed",
),
}
for mq in fs::read_dir("/dev/mqueue")? {
match mq {
Ok(mq) => {
print!(
"/{0: <10}",
mq.file_name().into_string().map_err(|e| anyhow!(
"Could not convert queue name to string: {:?}",
e
))?
);
if self.all {
let metadata = mq.metadata()?;
let modified: DateTime<Local> = metadata.modified()?.into();
let accessed: DateTime<Local> = metadata.accessed()?.into();
print!(
"{0: <10} {1: <12o} {2: <26} {3: <26}",
metadata.len(),
metadata.permissions().mode(),
modified,
accessed,
);
}
println!();
}
Err(e) => warn!("Could not read file: {:?}", e),
}
}
Ok(())
}
}