Skip to main content

GXHandle

Struct GXHandle 

Source
pub struct GXHandle<X: GXExt>(/* private fields */);
Expand description

A handle to a running GX instance.

Drop the handle to shutdown the associated background tasks.

Implementations§

Source§

impl<X: GXExt> GXHandle<X>

Source

pub fn subscriber(&self) -> Subscriber

Get a clone of the netidx subscriber used by this runtime.

Source

pub async fn get_env(&self) -> Result<Env>

Get a copy of the current graphix environment

Source

pub async fn check( &self, path: Source, initial_scope: Option<ArcStr>, ) -> Result<CheckResult>

Check that a graphix module compiles and type-checks.

If path starts with netidx: the module is loaded from netidx; otherwise it is loaded from the filesystem (or read directly if Source::Internal). On success returns a CheckResult containing both an env snapshot (as it would be after the module was compiled) and the set of resolved name references the compiler observed — useful for IDE tooling (textDocument/references). The runtime’s live environment is not altered — to keep the bindings live, use compile or load.

§Error position info

Compile and parse failures attach a structured context to the returned anyhow::Error carrying the originating Origin and SourcePosition. IDE tooling and other consumers should downcast_ref the error rather than scraping the chain’s message strings:

anyhow::Error::downcast_ref walks the context chain via anyhow’s vtable and returns the outermost match, which for the runtime’s compile path is the right one.

§IDE / LSP usage

CheckResult carries IDE side-channels populated only when env.lsp_mode is set: references, module_references, type_references, scope_map, sig_links, and module_internals. The first four record where the compiler saw each name and where it resolved; sig_links ties val foo in a .gxi to its let foo = … impl in the paired .gx; module_internals carries each module’s impl-side env so IDE queries inside a module body can chase impl bind metadata that isn’t visible from the project’s external view.

To check editor buffers without saving, layer a [ModuleResolver::BufferOverride] into the resolver chain — its override map shadows the on-disk version per path while preserving Source::File origins, so reference matching and goto-def land on the same file paths as a disk check would.

Source

pub async fn check_with_resolvers( &self, path: Source, resolvers: Vec<ModuleResolver>, initial_scope: Option<ArcStr>, ) -> Result<CheckResult>

Like check but overrides the runtime’s resolver chain for this call only. Used by IDE tooling to compile a project against a project-scoped resolver chain (e.g. Files(<root>)) without having to rebuild the runtime.

initial_scope, when set, scopes the entire compilation under the given module path (as if the source were the body of a mod <scope> { ... } block). Used by the LSP when editing a graphix package crate so its modules register under the package’s namespace.

Source

pub async fn compile(&self, text: ArcStr) -> Result<CompRes<X>>

Compile and execute a graphix expression

If it generates results, they will be sent to all the channels that are subscribed. When the CompExp objects contained in the CompRes are dropped their corresponding expressions will be deleted. Therefore, you can stop execution of the whole expression by dropping the returned CompRes.

Source

pub async fn load(&self, path: Source) -> Result<CompRes<X>>

Load and execute a file or netidx value

When the CompExp objects contained in the CompRes are dropped their corresponding expressions will be deleted. Therefore, you can stop execution of the whole file by dropping the returned CompRes.

Source

pub async fn compile_callable(&self, id: Value) -> Result<Callable<X>>

Compile a callable interface to a lambda id

This is how you call a lambda directly from rust. When the returned Callable is dropped the associated callsite will be delete.

Source

pub async fn compile_callable_by_name( &self, env: &Env, scope: &Scope, name: &ModPath, ) -> Result<NamedCallable<X>>

Compile a callable interface to a late bound function by name

This allows you to call a function by name. Because of late binding it has some additional complexity (though less than implementing it yourself). You must call update on NamedCallable when you recieve updates from the runtime in order to drive late binding. update will also return Some when one of your function calls returns.

Source

pub async fn compile_ref(&self, id: impl Into<BindId>) -> Result<Ref<X>>

Compile a ref to a bind id

This will NOT return an error if the id isn’t in the environment.

Source

pub async fn compile_ref_by_name( &self, env: &Env, scope: &Scope, name: &ModPath, ) -> Result<Ref<X>>

Compile a ref to a name

Return an error if the name does not exist in the environment

Source

pub fn set<T: Into<Value>>(&self, id: BindId, v: T) -> Result<()>

Set the variable idenfified by id to v

triggering updates of all dependent node trees. This does the same thing asRef::set and TRef::set

Source

pub fn call(&self, id: CallableId, args: ValArray) -> Result<()>

Call a callable by id with the given arguments

This is a fire-and-forget call that does not wait for the result. Unlike Callable::call, no type or arity checking is performed.

Trait Implementations§

Source§

impl<X: GXExt> Clone for GXHandle<X>

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<X: GXExt> Debug for GXHandle<X>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<X> Freeze for GXHandle<X>

§

impl<X> !RefUnwindSafe for GXHandle<X>

§

impl<X> Send for GXHandle<X>

§

impl<X> Sync for GXHandle<X>

§

impl<X> Unpin for GXHandle<X>

§

impl<X> UnsafeUnpin for GXHandle<X>

§

impl<X> !UnwindSafe for GXHandle<X>

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<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

Source§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

Source§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

Source§

fn implicit( self, class: Class, constructed: bool, tag: u32, ) -> TaggedParser<'a, Implicit, Self, E>

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
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> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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.