d248f7d17b
derive(Default) from applets
178 lines
4.0 KiB
Rust
178 lines
4.0 KiB
Rust
use clap::ArgMatches;
|
|
use shitbox::Cmd;
|
|
|
|
mod base32;
|
|
mod base64;
|
|
mod basename;
|
|
mod bootstrap;
|
|
mod cat;
|
|
mod chmod;
|
|
mod chown;
|
|
mod chroot;
|
|
mod corebox;
|
|
mod cp;
|
|
mod cut;
|
|
mod date;
|
|
mod dd;
|
|
mod df;
|
|
mod dirname;
|
|
mod echo;
|
|
mod expand;
|
|
mod factor;
|
|
mod r#false;
|
|
mod fold;
|
|
mod getty;
|
|
mod groups;
|
|
mod head;
|
|
mod hostid;
|
|
mod hostname;
|
|
mod link;
|
|
mod ln;
|
|
mod logname;
|
|
mod ls;
|
|
mod mkfifo;
|
|
mod mknod;
|
|
mod mktemp;
|
|
mod mv;
|
|
mod nologin;
|
|
mod nproc;
|
|
mod printenv;
|
|
mod pwd;
|
|
mod readlink;
|
|
mod realpath;
|
|
mod rev;
|
|
mod rm;
|
|
mod rmdir;
|
|
mod sleep;
|
|
mod sync;
|
|
mod touch;
|
|
mod r#true;
|
|
mod truncate;
|
|
mod unlink;
|
|
mod wc;
|
|
mod which;
|
|
mod who;
|
|
mod whoami;
|
|
mod yes;
|
|
|
|
/// Parses a string into a command to run
|
|
#[must_use]
|
|
pub fn get(name: &str) -> Option<Box<dyn Cmd>> {
|
|
match name {
|
|
"base64" => Some(Box::new(base64::Base64)),
|
|
"base32" => Some(Box::new(base32::Base32)),
|
|
"basename" => Some(Box::new(basename::Basename)),
|
|
"bootstrap" => Some(Box::new(bootstrap::Bootstrap)),
|
|
"chmod" => Some(Box::new(chmod::Chmod)),
|
|
"chgrp" => Some(Box::new(chown::Chgrp)),
|
|
"chown" => Some(Box::new(chown::Chown)),
|
|
"chroot" => Some(Box::new(chroot::Chroot)),
|
|
"corebox" => Some(Box::new(corebox::Corebox)),
|
|
"cut" => Some(Box::new(cut::Cut)),
|
|
"df" => Some(Box::new(df::Df)),
|
|
"dirname" => Some(Box::new(dirname::Dirname)),
|
|
"echo" => Some(Box::new(echo::Echo)),
|
|
"factor" => Some(Box::new(factor::Factor)),
|
|
"false" => Some(Box::new(r#false::False)),
|
|
"fold" => Some(Box::new(fold::Fold)),
|
|
"groups" => Some(Box::new(groups::Groups)),
|
|
"head" => Some(Box::new(head::Head)),
|
|
"hostid" => Some(Box::new(hostid::Hostid)),
|
|
"hostname" => Some(Box::new(hostname::Hostname)),
|
|
"link" => Some(Box::new(link::Link)),
|
|
"ln" => Some(Box::new(ln::Ln)),
|
|
"logname" => Some(Box::new(logname::Logname)),
|
|
"mkfifo" => Some(Box::new(mkfifo::MkFifo)),
|
|
"mknod" => Some(Box::new(mknod::MkNod)),
|
|
"mktemp" => Some(Box::new(mktemp::MkTemp)),
|
|
"nologin" => Some(Box::new(nologin::Nologin)),
|
|
"nproc" => Some(Box::new(nproc::Nproc)),
|
|
"printenv" => Some(Box::new(printenv::Printenv)),
|
|
"pwd" => Some(Box::new(pwd::Pwd)),
|
|
"readlink" => Some(Box::new(readlink::Readlink)),
|
|
"realpath" => Some(Box::new(realpath::Realpath)),
|
|
"rev" => Some(Box::new(rev::Rev)),
|
|
"rm" => Some(Box::new(rm::Rm)),
|
|
"rmdir" => Some(Box::new(rmdir::Rmdir)),
|
|
"sleep" => Some(Box::new(sleep::Sleep)),
|
|
"sync" => Some(Box::new(sync::Sync)),
|
|
"touch" => Some(Box::new(touch::Touch)),
|
|
"true" => Some(Box::new(r#true::True)),
|
|
"truncate" => Some(Box::new(truncate::Truncate)),
|
|
"unlink" => Some(Box::new(unlink::Unlink)),
|
|
"wc" => Some(Box::new(wc::Wc)),
|
|
"which" => Some(Box::new(which::Which)),
|
|
"who" => Some(Box::new(who::Who)),
|
|
"whoami" => Some(Box::new(whoami::Whoami)),
|
|
"yes" => Some(Box::new(yes::Yes)),
|
|
_ => None,
|
|
}
|
|
}
|
|
|
|
pub static COMMANDS: [&str; 46] = [
|
|
"base32",
|
|
"base64",
|
|
"basename",
|
|
"bootstrap",
|
|
"chgrp",
|
|
"chmod",
|
|
"chown",
|
|
"chroot",
|
|
"corebox",
|
|
"cut",
|
|
"df",
|
|
"dirname",
|
|
"echo",
|
|
"false",
|
|
"factor",
|
|
"fold",
|
|
"groups",
|
|
"head",
|
|
"hostid",
|
|
"hostname",
|
|
"link",
|
|
"ln",
|
|
"logname",
|
|
"mkfifo",
|
|
"mknod",
|
|
"mktemp",
|
|
"nologin",
|
|
"nproc",
|
|
"printenv",
|
|
"pwd",
|
|
"readlink",
|
|
"realpath",
|
|
"rev",
|
|
"rm",
|
|
"rmdir",
|
|
"sleep",
|
|
"sync",
|
|
"touch",
|
|
"true",
|
|
"truncate",
|
|
"unlink",
|
|
"wc",
|
|
"which",
|
|
"who",
|
|
"whoami",
|
|
"yes",
|
|
];
|
|
|
|
#[derive(Clone, Copy, Debug)]
|
|
enum Feedback {
|
|
Full,
|
|
Changes,
|
|
}
|
|
|
|
impl Feedback {
|
|
fn from_matches(matches: &ArgMatches) -> Option<Self> {
|
|
if matches.get_flag("verbose") {
|
|
Some(Feedback::Full)
|
|
} else if matches.get_flag("changes") {
|
|
Some(Feedback::Changes)
|
|
} else {
|
|
None
|
|
}
|
|
}
|
|
}
|