Struct Module

Source
pub struct Module { /* private fields */ }
Expand description

Deserialized module prepared for instantiation.

Implementations§

Source§

impl Module

Source

pub fn from_parity_wasm_module(module: Module) -> Result<Module, Error>

Create Module from parity_wasm::elements::Module.

This function will load, validate and prepare a parity_wasm’s Module.

§Errors

Returns Err if provided Module is not valid.

§Examples
extern crate parity_wasm;
extern crate patract_wasmi;

use parity_wasm::builder;
use parity_wasm::elements;

fn main() {
    let parity_module =
        builder::module()
            .function()
                .signature().with_param(elements::ValueType::I32).build()
                .body().build()
            .build()
        .build();

    let module = patract_wasmi::Module::from_parity_wasm_module(parity_module)
        .expect("parity-wasm builder generated invalid module!");

    // Instantiate `module`, etc...
}
Source

pub fn deny_floating_point(&self) -> Result<(), Error>

Fail if the module contains any floating-point operations

§Errors

Returns Err if provided Module is not valid.

§Examples

let wasm_binary: Vec<u8> =
    wabt::wat2wasm(
        r#"
        (module
         (func $add (param $lhs i32) (param $rhs i32) (result i32)
               get_local $lhs
               get_local $rhs
               i32.add))
        "#,
    )
    .expect("failed to parse wat");

// Load wasm binary and prepare it for instantiation.
let module = patract_wasmi::Module::from_buffer(&wasm_binary).expect("Parsing failed");
assert!(module.deny_floating_point().is_ok());

let wasm_binary: Vec<u8> =
    wabt::wat2wasm(
        r#"
        (module
         (func $add (param $lhs f32) (param $rhs f32) (result f32)
               get_local $lhs
               get_local $rhs
               f32.add))
        "#,
    )
    .expect("failed to parse wat");

let module = patract_wasmi::Module::from_buffer(&wasm_binary).expect("Parsing failed");
assert!(module.deny_floating_point().is_err());

let wasm_binary: Vec<u8> =
    wabt::wat2wasm(
        r#"
        (module
         (func $add (param $lhs f32) (param $rhs f32) (result f32)
               get_local $lhs))
        "#,
    )
    .expect("failed to parse wat");

let module = patract_wasmi::Module::from_buffer(&wasm_binary).expect("Parsing failed");
assert!(module.deny_floating_point().is_err());
Source

pub fn from_buffer<B: AsRef<[u8]>>(buffer: B) -> Result<Module, Error>

Create Module from a given buffer.

This function will deserialize wasm module from a given module, validate and prepare it for instantiation.

§Errors

Returns Err if wasm binary in provided buffer is not valid wasm binary.

§Examples
extern crate patract_wasmi;

fn main() {
    let module =
        patract_wasmi::Module::from_buffer(
            // Minimal module:
            //   \0asm - magic
            //    0x01 - version (in little-endian)
            &[0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00]
        ).expect("Failed to load minimal module");

    // Instantiate `module`, etc...
}
Source

pub fn parse_names(self) -> Result<Module, Error>

Try to parse name section in place.

Corresponding custom section with proper header will convert to name sections If some of them will fail to be decoded, Err variant is returned with the list of (index, Error) tuples of failed sections.

Source

pub fn try_parse_names(self) -> Module

Same as parse_names, but without error returns.

Auto Trait Implementations§

§

impl Freeze for Module

§

impl RefUnwindSafe for Module

§

impl Send for Module

§

impl Sync for Module

§

impl Unpin for Module

§

impl UnwindSafe for Module

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> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
Source§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
Source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
Source§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

Source§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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.