[][src]Struct runestick::module::Module

pub struct Module { /* fields omitted */ }

A collection of functions that can be looked up by type.

Implementations

impl Module[src]

pub fn new<I>(path: I) -> Self where
    I: IntoIterator,
    I::Item: Into<Component>, 
[src]

Construct a new module.

pub fn ty<N>(&mut self, name: N) -> TypeBuilder<'_, N> where
    N: IntoIterator,
    N::Item: Into<Component>, 
[src]

Register a type. Registering a type is mandatory in order to register instance functions using that type.

This will allow the type to be used within scripts, using the item named here.

Examples

struct MyBytes {
    queue: Vec<String>,
}

impl MyBytes {
    fn len(&self) -> usize {
        self.queue.len()
    }
}

runestick::decl_external!(MyBytes);

// Register `len` without registering a type.
let mut module = runestick::Module::default();
// Note: cannot do this until we have registered a type.
module.inst_fn("len", MyBytes::len)?;

let mut context = runestick::Context::new();
assert!(context.install(&module).is_err());

// Register `len` properly.
let mut module = runestick::Module::default();

module.ty(&["MyBytes"]).build::<MyBytes>()?;
module.inst_fn("len", MyBytes::len)?;

let mut context = runestick::Context::new();
assert!(context.install(&module).is_ok());

pub fn unit<N>(&mut self, name: N) -> Result<(), ContextError> where
    N: IntoIterator,
    N::Item: Into<Component>, 
[src]

Construct type information for the unit type.

Registering this allows the given type to be used in Rune scripts when referring to the unit type.

Examples

This shows how to register the unit type () as nonstd::unit.

let mut module = runestick::Module::new(&["nonstd"]);
module.unit(&["unit"])?;

pub fn option<N>(&mut self, name: N) -> Result<(), ContextError> where
    N: IntoIterator,
    N::Item: Into<Component>, 
[src]

Construct type information for the Option type.

Registering this allows the given type to be used in Rune scripts when referring to the Option type.

Examples

This shows how to register the Option as nonstd::option::Option.

let mut module = runestick::Module::new(&["nonstd", "option"]);
module.result(&["Option"])?;

pub fn result<N>(&mut self, name: N) -> Result<(), ContextError> where
    N: IntoIterator,
    N::Item: Into<Component>, 
[src]

Construct type information for the internal Result type.

Registering this allows the given type to be used in Rune scripts when referring to the Result type.

Examples

This shows how to register the Result as nonstd::result::Result.

let mut module = runestick::Module::new(&["nonstd", "result"]);
module.result(&["Result"])?;

pub fn generator_state<N>(&mut self, name: N) -> Result<(), ContextError> where
    N: IntoIterator,
    N::Item: Into<Component>, 
[src]

Construct the type information for the GeneratorState type.

Registering this allows the given type to be used in Rune scripts when referring to the GeneratorState type.

Examples

This shows how to register the GeneratorState as nonstd::generator::GeneratorState.

let mut module = runestick::Module::new(&["nonstd", "generator"]);
module.generator_state(&["GeneratorState"])?;

pub fn function<Func, Args, N>(
    &mut self,
    name: N,
    f: Func
) -> Result<(), ContextError> where
    Func: Function<Args>,
    N: IntoIterator,
    N::Item: Into<Component>, 
[src]

Register a function that cannot error internally.

Examples

fn add_ten(value: i64) -> i64 {
    value + 10
}

let mut module = runestick::Module::default();

module.function(&["add_ten"], add_ten)?;
module.function(&["empty"], || Ok::<_, runestick::Error>(()))?;
module.function(&["string"], |a: String| Ok::<_, runestick::Error>(()))?;
module.function(&["optional"], |a: Option<String>| Ok::<_, runestick::Error>(()))?;

pub fn async_function<Func, Args, N>(
    &mut self,
    name: N,
    f: Func
) -> Result<(), ContextError> where
    Func: AsyncFunction<Args>,
    N: IntoIterator,
    N::Item: Into<Component>, 
[src]

Register a function.

Examples

let mut module = runestick::Module::default();

module.async_function(&["empty"], || async { () })?;
module.async_function(&["empty_fallible"], || async { Ok::<_, runestick::Error>(()) })?;
module.async_function(&["string"], |a: String| async { Ok::<_, runestick::Error>(()) })?;
module.async_function(&["optional"], |a: Option<String>| async { Ok::<_, runestick::Error>(()) })?;

pub fn raw_fn<F, N>(&mut self, name: N, f: F) -> Result<(), ContextError> where
    F: 'static + Copy + Fn(&mut Stack, usize) -> Result<(), VmError> + Send + Sync,
    N: IntoIterator,
    N::Item: Into<Component>, 
[src]

Register a raw function which interacts directly with the virtual machine.

pub fn inst_fn<N, Func, Args>(
    &mut self,
    name: N,
    f: Func
) -> Result<(), ContextError> where
    N: IntoInstFnHash,
    Func: InstFn<Args>, 
[src]

Register an instance function.

Examples

struct MyBytes {
    queue: Vec<String>,
}

impl MyBytes {
    fn new() -> Self {
        Self {
            queue: Vec::new(),
        }
    }

    fn len(&self) -> usize {
        self.queue.len()
    }
}

runestick::decl_external!(MyBytes);

let mut module = runestick::Module::default();

module.ty(&["MyBytes"]).build::<MyBytes>()?;
module.function(&["MyBytes", "new"], MyBytes::new)?;
module.inst_fn("len", MyBytes::len)?;

let mut context = runestick::Context::new();
context.install(&module)?;

pub fn getter<N, Func, Args>(
    &mut self,
    name: N,
    f: Func
) -> Result<(), ContextError> where
    N: IntoInstFnHash,
    Func: InstFn<Args>, 
[src]

Install a getter for the specified field.

pub fn async_inst_fn<N, Func, Args>(
    &mut self,
    name: N,
    f: Func
) -> Result<(), ContextError> where
    N: IntoInstFnHash,
    Func: AsyncInstFn<Args>, 
[src]

Register an instance function.

Examples

use std::sync::atomic::AtomicU32;
use std::sync::Arc;

runestick::decl_external!(MyType);

#[derive(Clone, Debug)]
struct MyType {
    value: Arc<AtomicU32>,
}

impl MyType {
    async fn test(&self) -> runestick::Result<()> {
        Ok(())
    }
}

let mut module = runestick::Module::default();

module.ty(&["MyType"]).build::<MyType>()?;
module.async_inst_fn("test", MyType::test)?;

Trait Implementations

impl Default for Module[src]

Auto Trait Implementations

impl !RefUnwindSafe for Module

impl !Send for Module

impl !Sync for Module

impl Unpin for Module

impl !UnwindSafe for Module

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.

impl<V, T> VZip<V> for T where
    V: MultiLane<T>,