Skip to main content

Module

Struct Module 

Source
pub struct Module<State>
where State: Clone + Send + Sync + 'static,
{ pub name: String, /* private fields */ }

Fields§

§name: String

Implementations§

Source§

impl<State> Module<State>
where State: Clone + Send + Sync + 'static,

Source

pub fn new(name: impl Into<String>) -> Module<State>

Source

pub fn add_declaration( &mut self, declaration: impl Into<String>, ) -> Result<(), EngineError>

Add raw Rex declarations to this module (for example pub type ...).

Declarations are concatenated into the module source exactly as provided.

Source

pub fn add_adt_decl(&mut self, adt: AdtDecl) -> Result<(), EngineError>

Add an ADT declaration to this module.

Source

pub fn add_adt_decls_from_types( &mut self, engine: &mut Engine<State>, types: Vec<Type>, ) -> Result<(), EngineError>

Collect user ADTs referenced by types, convert each to an AdtDecl, and add the declarations to this module.

This deduplicates discovered ADTs across all inputs. If conflicting ADT definitions are found (same name, different constructor definition), this returns an EngineError describing every conflict.

§Examples
use rex_engine::{Engine, Module};
use rexlang_typesystem::{BuiltinTypeId, Type};

let mut engine = Engine::with_prelude(()).unwrap();
let mut module = Module::new("acme.types");
let types = vec![
    Type::app(Type::user_con("Foo", 1), Type::builtin(BuiltinTypeId::I32)),
    Type::user_con("Bar", 0),
];

module.add_adt_decls_from_types(&mut engine, types).unwrap();
Source

pub fn inject_rex_adt<T>( &mut self, engine: &mut Engine<State>, ) -> Result<(), EngineError>
where T: RexAdt,

Build and add a Rust-backed ADT declaration into this module.

Source

pub fn add_export(&mut self, export: Export<State>)

Source

pub fn export<Sig, H>( &mut self, name: impl Into<String>, handler: H, ) -> Result<(), EngineError>
where H: Handler<State, Sig>,

Source

pub fn export_async<Sig, H>( &mut self, name: impl Into<String>, handler: H, ) -> Result<(), EngineError>
where H: AsyncHandler<State, Sig>,

Source

pub fn export_native<F>( &mut self, name: impl Into<String>, scheme: Scheme, arity: usize, handler: F, ) -> Result<(), EngineError>
where F: for<'a> Fn(&'a Engine<State>, &'a Type, &'a [Pointer]) -> Result<Pointer, EngineError> + Send + Sync + 'static,

Source

pub fn export_native_async<F>( &mut self, name: impl Into<String>, scheme: Scheme, arity: usize, handler: F, ) -> Result<(), EngineError>
where F: for<'a> Fn(&'a Engine<State>, Type, Vec<Pointer>) -> Pin<Box<dyn Future<Output = Result<Pointer, EngineError>> + Send + 'a>> + Send + Sync + 'static,

Auto Trait Implementations§

§

impl<State> Freeze for Module<State>

§

impl<State> !RefUnwindSafe for Module<State>

§

impl<State> Send for Module<State>

§

impl<State> !Sync for Module<State>

§

impl<State> Unpin for Module<State>

§

impl<State> UnsafeUnpin for Module<State>

§

impl<State> !UnwindSafe for Module<State>

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