Skip to main content

Engine

Struct Engine 

Source
pub struct Engine<P = ShellProcessManager>
where P: ProcessManager,
{ /* private fields */ }
Expand description

Host-extension engine: the single front door for registering Rust functions and types and running scripts against them.

The type parameter selects the process manager: the default DefaultProcessManager runs real subprocesses, while test harnesses pass their mock (Engine::<MockProcessManager>::new_custom() in crates/oxdock-core/tests/integration/custom_types.rs shows the shape). Staged IO applies to every run; the process manager and the filesystem are chosen per run, so one engine serves many roots.

Implementations§

Source§

impl<P> Engine<P>
where P: ProcessManager,

Source

pub fn new_custom() -> Engine<P>

Empty engine for a custom process manager, with default IO and no host surface. Prefer Engine::new for the default manager: a bare Engine::new() pins the manager type for inference, while this constructor needs the turbofish (Engine::<Mock>::new_custom()). Engine::<P>::default() works the same way.

Source

pub fn with_io(self, io: ExecIo) -> Engine<P>

Stage custom IO (for example inherited environment overrides) for every run. Chainable.

Source

pub fn register_module(&mut self, module: HostModule<P>) -> &mut Engine<P>

Register a host library module: its functions become callable as MODULE::NAME, its types join the run’s name directory. Chainable. Group #[oxdock_func] markers (for example MakeTag for make_tag) with their #[oxdock_type] payloads here. Panics on a duplicate qualified name, including collisions with STD builtins; the registry re-checks at run time for direct state users.

Source

pub fn register_type<T>(&mut self) -> &mut Engine<P>
where T: OxDockType,

Register a #[oxdock_type] payload struct. Chainable. Staged for the run: values mint straight from the payload type’s own descriptor, which needs no registration to exist.

Source

pub fn module_table(&self) -> ModuleTable

Parse-time module table for this engine: stock STD builtins plus every staged host module (function names and RPN eligibility). Unknown modules stay unknown: the oxdock! macro declares its own opaque modules via the modules: prefix instead.

Source

pub fn run_script_on( &self, fs: Box<dyn WorkspaceFs>, script: &str, process: P, ) -> Result<EngineOutput, Error>

Parse and run script on a caller-built filesystem with process as the manager and the registered host surface available.

Source

pub fn run_steps_on( &self, fs: Box<dyn WorkspaceFs>, steps: &[Step], process: P, ) -> Result<EngineOutput, Error>

Run already parsed steps (for example from the oxdock! macro, which builds the same DSL at compile time) on a caller-built filesystem with process as the manager and the registered host surface available.

Source§

impl Engine

Source

pub fn new() -> Engine

Empty engine with default IO and no host surface. Concrete by construction, so let mut engine = Engine::new() needs no annotation; custom managers use Engine::<P>::new_custom().

Source

pub fn run_script( &self, root: &GuardedPath, script: &str, ) -> Result<EngineOutput, Error>

Parse and run script with root as the workspace, with the registered host surface available. Uses the default process manager and a resolver built from root.

Source

pub fn run_steps( &self, root: &GuardedPath, steps: &[Step], ) -> Result<EngineOutput, Error>

Run already parsed steps (for example from the oxdock! macro, which builds the same DSL at compile time) with root as the workspace and the registered host surface available. Uses the default process manager and a resolver built from root.

Trait Implementations§

Source§

impl<P> Default for Engine<P>
where P: ProcessManager,

Source§

fn default() -> Engine<P>

Returns the “default value” for a type. Read more

Auto Trait Implementations§

§

impl<P = ShellProcessManager> !RefUnwindSafe for Engine<P>

§

impl<P = ShellProcessManager> !UnwindSafe for Engine<P>

§

impl<P> Freeze for Engine<P>
where Vec<HostModule<P>>: Freeze,

§

impl<P> Send for Engine<P>
where Vec<HostModule<P>>: Send,

§

impl<P> Sync for Engine<P>
where Vec<HostModule<P>>: Sync,

§

impl<P> Unpin for Engine<P>
where Vec<HostModule<P>>: Unpin,

§

impl<P> UnsafeUnpin for Engine<P>

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<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> 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.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more