use super::builtin::{Builtin, BuiltinKind};
use super::io::Which;
mod cat;
mod cp;
pub(crate) mod small;
pub(crate) fn implemented(kind: BuiltinKind) -> bool {
!matches!(
kind,
BuiltinKind::Ls
| BuiltinKind::Rm
| BuiltinKind::Mkdir
| BuiltinKind::Touch
| BuiltinKind::Mv
)
}
pub(crate) async fn run(b: &mut Builtin<'_>) -> i32 {
match b.kind {
BuiltinKind::Echo => small::echo(b).await,
BuiltinKind::Exit => small::exit(b).await,
BuiltinKind::True => 0,
BuiltinKind::False => 1,
BuiltinKind::Pwd => small::pwd(b).await,
BuiltinKind::Cd => small::cd(b).await,
BuiltinKind::Export => small::export(b).await,
BuiltinKind::Basename => small::basename(b).await,
BuiltinKind::Dirname => small::dirname(b).await,
BuiltinKind::Yes => small::yes(b).await,
BuiltinKind::Seq => small::seq(b).await,
BuiltinKind::Which => small::which(b).await,
BuiltinKind::Cat => cat::cat(b).await,
BuiltinKind::Cp => cp::cp(b).await,
BuiltinKind::Ls
| BuiltinKind::Rm
| BuiltinKind::Mkdir
| BuiltinKind::Touch
| BuiltinKind::Mv => {
let msg = b.fmt_err("not implemented\n");
let _ = b.write(Which::Stderr, msg).await;
1
}
}
}