[][src]Module whasm::grammar::core::signed

This module defines the deserialization of signed integer numbers (i8, i16, i32, i64 and isize).

let mut iter = [0x56].iter().copied();
let result: i8 = deserialize(&mut iter).unwrap();
assert_eq!(result, -42);

The WebAssembly Specification specifies that signed integer numbers should be serialized using signed LEB-128 encoding. This means that a number can be encoded with a variable number of bytes.

let mut iter = [0xD6, 0xFF, 0x7F].iter().copied();
let result: i8 = deserialize(&mut iter).unwrap();
assert_eq!(result, -42);

Deserializing a signed integer will return the Err(_) variant if the iterator is exhausted before completing the deserialization.

let mut iter = [0xD6, 0xFF].iter().copied();
let result: Result<i8> = deserialize(&mut iter);
assert!(result.is_err());

Deserialization will also return the Err(_) variant if the encoded numeric value is out of bound for the type being deserialized.

let mut iter = [0xD6, 0x7E].iter().copied();
let result: Result<i8> = deserialize(&mut iter);
assert!(result.is_err());