[−][src]Trait whasm::grammar::core::Grammar
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>
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.