Skip to main content

LeanThreadGuard

Struct LeanThreadGuard 

Source
pub struct LeanThreadGuard<'lean> { /* private fields */ }
Expand description

RAII handle that attaches the current OS thread to the Lean runtime.

When constructed via LeanThreadGuard::attach, the guard registers the calling thread with the Lean runtime so that thread may invoke compiled Lean code. When the guard is dropped (or its scope ends), the thread is detached again. Threads spawned by Lean itself are already attached and do not need a guard; the thread that called crate::LeanRuntime::init is likewise treated as attached for its entire lifetime.

The guard is neither Send nor Sync: it represents a per-thread resource, and shipping it to a different OS thread to be dropped would detach the wrong thread. The 'lean lifetime parameter ties the guard to a LeanRuntime borrow, so a guard cannot outlive the runtime it is bound to.

Nested attaches are legal: a worker thread already inside an outer LeanThreadGuard may construct another (e.g. inside a callback) and the per-thread attach depth tracks the pairs so the host-call attach assertion does not fire prematurely.

§Example

// Inside a worker thread you spawned yourself:
let runtime = lean_rs::LeanRuntime::init()?;
let _guard = lean_rs::LeanThreadGuard::attach(runtime);
// ... call into Lean from this thread ...
// `_guard` is dropped at scope exit, detaching the thread cleanly.

Implementations§

Source§

impl<'lean> LeanThreadGuard<'lean>

Source

pub fn attach(_runtime: &'lean LeanRuntime) -> Self

Attach the current OS thread to the Lean runtime.

Construction requires a borrow of the process LeanRuntime handle; that borrow is the type-level proof that the runtime has been initialized on this process. The returned guard must be dropped on the same thread that attached it.

Trait Implementations§

Source§

impl Drop for LeanThreadGuard<'_>

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§

§

impl<'lean> Freeze for LeanThreadGuard<'lean>

§

impl<'lean> RefUnwindSafe for LeanThreadGuard<'lean>

§

impl<'lean> !Send for LeanThreadGuard<'lean>

§

impl<'lean> !Sync for LeanThreadGuard<'lean>

§

impl<'lean> Unpin for LeanThreadGuard<'lean>

§

impl<'lean> UnsafeUnpin for LeanThreadGuard<'lean>

§

impl<'lean> UnwindSafe for LeanThreadGuard<'lean>

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 = 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<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