From 7bd6e6253268ec626a7191344ce9ff77358f94db Mon Sep 17 00:00:00 2001 From: Jonas Maier <> Date: Sat, 7 Mar 2026 09:45:10 +0100 Subject: adjust builtins for new trait --- src/run/mod.rs | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) (limited to 'src/run/mod.rs') diff --git a/src/run/mod.rs b/src/run/mod.rs index 8c629b0..a27812f 100644 --- a/src/run/mod.rs +++ b/src/run/mod.rs @@ -256,22 +256,31 @@ pub fn run(se: &mut Session, cmd: Vec) { let _ = std::io::stdout().lock().flush(); } +#[derive(Debug)] +enum BuiltinError { + IO(std::io::Error), + Exit(i32), +} + +impl From for BuiltinError { + fn from(value: std::io::Error) -> Self { + Self::IO(value) + } +} + +type BuiltinResult = Result<(), BuiltinError>; + #[allow(unused_variables)] pub trait Builtin: Send + Sync { fn name(&self) -> &str; - /// quick synchronous call, `cd` for example - fn mod_session(&self, session: &mut Session, args: &[BString]) {} - - /// potentially long, pipelineable thread, builtin `cat` for example fn io( &self, + session: Arc>, args: &[BString], stdin: &mut dyn Read, stdout: &mut dyn Write, - ) -> std::io::Result<()> { - Ok(()) - } + ) -> BuiltinResult; } const BUILTINS: &[&'static dyn Builtin] = &[ -- cgit v1.2.3