[][src]Trait whasm::grammar::core::Grammar

pub trait Grammar where
    Self: Sized
{ fn deserialize<Iter: Iterator<Item = u8>>(iter: &mut Iter) -> Result<Self>; }

Trait that describes an element of the WebAssembly grammar (as defined in the WebAssembly Specification). Objects that implement this trait can be deserialized from an Iterator<u8>.

This trait requires implementing the deserialize method. However, in most cases the Grammar derive macro can be used instead. The derive macro defines new grammars declaratively, making it the preferred approach to define new grammars.

Example

struct AsciiChar(char);
impl Grammar for AsciiChar {
    fn deserialize<Iter: Iterator<Item=u8>>(iter: &mut Iter) -> Result<Self> {
        let Byte(byte) = deserialize(iter)?;
        if byte & 0x80 != 0 {
            Err("The most significant bit of an ASCII character must be 0.")?;
        }
        Ok(AsciiChar(byte as char))
    }
}

Required methods

fn deserialize<Iter: Iterator<Item = u8>>(iter: &mut Iter) -> Result<Self>

Loading content...

Implementations on Foreign Types

impl Grammar for u8[src]

impl Grammar for u16[src]

impl Grammar for u32[src]

impl Grammar for u64[src]

impl Grammar for usize[src]

impl Grammar for i8[src]

impl Grammar for i16[src]

impl Grammar for i32[src]

impl Grammar for i64[src]

impl Grammar for isize[src]

impl<T: Grammar> Grammar for Vec<T>[src]

impl Grammar for String[src]

impl Grammar for f32[src]

impl Grammar for f64[src]

impl<T: Grammar> Grammar for [T; 0][src]

impl<T: Grammar> Grammar for [T; 1][src]

impl<T: Grammar> Grammar for [T; 2][src]

impl<T: Grammar> Grammar for [T; 3][src]

impl<T: Grammar> Grammar for [T; 4][src]

impl<T: Grammar> Grammar for [T; 5][src]

impl<T: Grammar> Grammar for [T; 6][src]

impl<T: Grammar> Grammar for [T; 7][src]

impl<T: Grammar> Grammar for [T; 8][src]

Loading content...

Implementors

impl Grammar for Instruction[src]

impl Grammar for ExportDesc[src]

impl Grammar for ImportDesc[src]

impl Grammar for Section[src]

impl Grammar for BlockType[src]

impl Grammar for ElemType[src]

impl Grammar for FuncType[src]

impl Grammar for Limits[src]

impl Grammar for Mut[src]

impl Grammar for ValType[src]

impl Grammar for Byte[src]

fn deserialize<Iter: Iterator<Item = u8>>(iter: &mut Iter) -> Result<Self>[src]

Read a Byte from an Iterator<u8>. It returns Ok(Byte(_)) on success, and Error(Error::UnexpectedEndOfStream) if the iterator returns None.

Deserializing a Byte instead of using iter.next() is an easy way to convert the Option<u8> returned by the iterator into a Result<u8> with a meaningful error type.

impl Grammar for FuncIdx[src]

impl Grammar for GlobalIdx[src]

impl Grammar for LabelIdx[src]

impl Grammar for LocalIdx[src]

impl Grammar for MemIdx[src]

impl Grammar for TableIdx[src]

impl Grammar for TypeIdx[src]

impl Grammar for BlockInstr[src]

impl Grammar for Expression[src]

impl Grammar for IfInstr[src]

impl Grammar for MemArg[src]

impl Grammar for Module[src]

impl Grammar for CodeSection[src]

impl Grammar for CustomSection[src]

impl Grammar for Data[src]

impl Grammar for DataSection[src]

impl Grammar for Element[src]

impl Grammar for ElementSection[src]

impl Grammar for Export[src]

impl Grammar for ExportSection[src]

impl Grammar for FuncSection[src]

impl Grammar for Function[src]

impl Grammar for Global[src]

impl Grammar for GlobalSection[src]

impl Grammar for Import[src]

impl Grammar for ImportSection[src]

impl Grammar for Locals[src]

impl Grammar for Memory[src]

impl Grammar for MemorySection[src]

impl Grammar for StartSection[src]

impl Grammar for Table[src]

impl Grammar for TableSection[src]

impl Grammar for TypeSection[src]

impl Grammar for GlobalType[src]

impl Grammar for MemType[src]

impl Grammar for TableType[src]

impl<T: Grammar> Grammar for List<T>[src]

Loading content...