pub struct Library<State: Clone + Send + Sync + 'static> {
pub name: String,
/* private fields */
}Fields§
§name: StringImplementations§
Source§impl<State> Library<State>
impl<State> Library<State>
pub fn new(name: impl Into<String>) -> Self
Sourcepub fn add_declaration(
&mut self,
declaration: impl Into<String>,
) -> Result<(), EngineError>
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.
Sourcepub fn add_adt_decl(&mut self, adt: AdtDecl) -> Result<(), EngineError>
pub fn add_adt_decl(&mut self, adt: AdtDecl) -> Result<(), EngineError>
Add an ADT declaration to this library.
Sourcepub fn add_adt_decls_from_types(
&mut self,
engine: &mut Engine<State>,
types: Vec<Type>,
) -> Result<(), EngineError>
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();Sourcepub fn inject_rex_adt<T>(
&mut self,
engine: &mut Engine<State>,
) -> Result<(), EngineError>where
T: RexAdt,
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.
pub fn add_export(&mut self, export: Export<State>)
pub fn export<Sig, H>(
&mut self,
name: impl Into<String>,
handler: H,
) -> Result<(), EngineError>where
H: Handler<State, Sig>,
pub fn export_async<Sig, H>(
&mut self,
name: impl Into<String>,
handler: H,
) -> Result<(), EngineError>where
H: AsyncHandler<State, Sig>,
pub fn export_native<F>( &mut self, name: impl Into<String>, scheme: Scheme, arity: usize, handler: F, ) -> Result<(), EngineError>
pub fn export_native_async<F>( &mut self, name: impl Into<String>, scheme: Scheme, arity: usize, handler: F, ) -> Result<(), EngineError>
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> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more