Skip to main content

Library

Struct Library 

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

Fields§

§name: String

Implementations§

Source§

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

Source

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

Source

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

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

Declarations are concatenated into the library source exactly as provided.

Source

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

Add an ADT declaration to this library.

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 library.

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, Library};
use rexlang_typesystem::{BuiltinTypeId, Type};

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

library.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 library.

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>) -> NativeFuture<'a> + Send + Sync + 'static,

Auto Trait Implementations§

§

impl<State> Freeze for Library<State>

§

impl<State> !RefUnwindSafe for Library<State>

§

impl<State> Send for Library<State>

§

impl<State> !Sync for Library<State>

§

impl<State> Unpin for Library<State>

§

impl<State> UnsafeUnpin for Library<State>

§

impl<State> !UnwindSafe for Library<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