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

pub struct Module { /* fields omitted */ }
Expand description

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

Implementations

Create an empty module for the root path.

Construct a new module for the given item.

Construct a new module for the given crate.

Construct a new module for the given crate.

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

use runestick::Any;

#[derive(Any)]
struct MyBytes {
    queue: Vec<String>,
}

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

// 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>()?;
module.inst_fn("len", MyBytes::len)?;

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

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.

use runestick::Module;

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

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.

use runestick::Module;

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

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.

use runestick::Module;

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

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.

use runestick::Module;

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

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>(()))?;

Register a constant value, at a crate, module or associated level.

Examples


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

module.constant(&["TEN"], 10)?; // a global TEN value
module.constant(&["MyType", "TEN"], 10)?; // looks like an associated value

Register a native macro handler.

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>(()) })?;

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

Register an instance function.

Examples

use runestick::Any;

#[derive(Any)]
struct MyBytes {
    queue: Vec<String>,
}

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

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

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

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

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

Install a protocol function for the given field.

Register an instance function.

Examples

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

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

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

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

module.ty::<MyType>()?;
module.async_inst_fn("test", MyType::test)?;

Trait Implementations

Returns the “default value” for a type. Read more

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Performs the conversion.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.