Skip to main content

NixExecutor

Struct NixExecutor 

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

Executor that runs synthesized stages through Nix-managed language runtimes.

When nix is available, each stage is executed as a subprocess with a Nix-pinned runtime (e.g. nix run nixpkgs#python3 -- stage.py). The Nix binary cache ensures the runtime is downloaded once and then reused from the store. This gives reproducibility, not isolation: the subprocess inherits the host user’s privileges, filesystem, and network. See module docs and SECURITY.md for the full trust model.

§Resource limits

Implementations§

Source§

impl NixExecutor

Source

pub fn find_nix() -> Option<PathBuf>

Probe the system for a usable nix binary. Returns the path if found, or None if Nix is not installed.

Source

pub fn from_store(store: &dyn StageStore) -> Option<Self>

Build an executor that can run synthesized stages found in store.

Returns None when nix is not available — callers should fall back to InlineExecutor exclusively in that case.

Source

pub fn from_store_with_config( store: &dyn StageStore, config: NixConfig, ) -> Option<Self>

Like [from_store] but with a custom NixConfig.

Source

pub fn config_snapshot(&self) -> NixConfig

Clone the current config (minus the implementations map) for callers that want to rebuild with different knobs.

Source

pub fn rebuild_with_config(self, config: NixConfig) -> Option<Self>

Rebuild a NixExecutor with a replacement config, preserving its registered implementations. Returns Some(..) or None when reconstruction fails — today it can’t fail, but the Option keeps the API forward-compatible.

Source

pub fn register_with_effects( &mut self, stage_id: &StageId, code: &str, language: &str, effects: EffectSet, )

Register a stage with explicit declared effects. Used by tests and by callers that want to drive the isolation policy without going through the full StageStore.

Source

pub fn has_implementation(&self, stage_id: &StageId) -> bool

True when we have a real implementation for this stage.

Source

pub fn warmup(&self) -> JoinHandle<()>

Pre-fetch the Python 3 runtime into the Nix store in a background thread.

The first time any Python stage runs, Nix may take several seconds to download and verify the runtime closure. Calling warmup() at startup overlaps that latency with application boot time.

The returned JoinHandle can be ignored — any error is logged to stderr but does not affect correctness; the runtime will still be fetched on first actual use.

Trait Implementations§

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<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> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
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 = Infallible

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

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

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<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

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
Source§

impl<T> Allocation for T
where T: RefUnwindSafe + Send + Sync,