Skip to main content

ScriptProcess

Struct ScriptProcess 

Source
pub struct ScriptProcess { /* private fields */ }
Expand description

Manages a single script subprocess with JSON-line communication.

The subprocess receives ScriptEvent objects serialized as JSON lines on stdin, and emits ScriptCommand objects as JSON lines on stdout. Stderr is captured separately for error reporting.

Implementations§

Source§

impl ScriptProcess

Source

pub fn spawn( command: &str, args: &[&str], env_vars: &HashMap<String, String>, ) -> Result<Self, String>

Spawn a script subprocess with piped stdin/stdout/stderr.

Starts background threads to read stdout (parsing JSON into ScriptCommand) and stderr (collecting error lines).

§Arguments
  • command - The command to execute (e.g., “python3”).
  • args - Arguments to pass to the command.
  • env_vars - Additional environment variables to set for the subprocess.
§Errors

Returns an error string if the subprocess cannot be spawned.

Source

pub fn poll_status(&mut self) -> ScriptStatus

Poll the process liveness, classifying an exit as clean or failed.

The first observed exit is sticky: ScriptStatus::Exited is recorded and the child handle is dropped, so later calls are cheap and the supervisor sees the transition exactly once. Self::is_running is defined in terms of this.

Source

pub fn is_running(&mut self) -> bool

Check if the child process is still alive.

Returns false once the process has exited (cleanly or otherwise).

Source

pub fn send_event(&mut self, event: &ScriptEvent) -> Result<(), String>

Serialize a ScriptEvent to JSON and write it to the child’s stdin as a line.

§Errors

Returns an error if the stdin writer is not available or if the write fails.

Source

pub fn read_commands(&self) -> Vec<ScriptCommand>

Drain pending commands from the command buffer.

Returns all commands that have been parsed from the child’s stdout since the last call to this method.

Source

pub fn read_errors(&self) -> Vec<String>

Drain pending error lines from the error buffer.

Returns all lines that have been read from the child’s stderr since the last call to this method.

Source

pub fn stop(&mut self)

Stop the subprocess.

Drops the stdin writer (sending EOF to the child), kills the child process if it’s still running, and waits for it to exit.

Trait Implementations§

Source§

impl Drop for ScriptProcess

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

fn pin_drop(self: Pin<&mut Self>)

🔬This is a nightly-only experimental API. (pin_ergonomics)
Execute the destructor for this type, but different to Drop::drop, it requires self to be pinned. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
Source§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
Source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
Source§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

Source§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Sync + Send> ⓘ

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.