wadec 0.0.1

A library for decoding WebAssembly modules.
Documentation
use crate::core::Global;
use crate::core::types::GlobalType;
use crate::decode::helpers::{DecodeVectorError, ParseExpressionError, decode_expr, decode_vector};
use crate::decode::types::DecodeGlobalTypeError;
use std::io::Read;
use thiserror::Error;

#[derive(Debug, Error)]
pub enum DecodeGlobalSectionError {
    #[error("failed decoding Global section")]
    DecodeVector(#[from] DecodeVectorError<DecodeGlobalError>),
}

pub(crate) fn decode_global_section<R: Read + ?Sized>(
    reader: &mut R,
) -> Result<Vec<Global>, DecodeGlobalSectionError> {
    Ok(decode_vector(reader, parse_global)?)
}

#[derive(Debug, Error)]
pub enum DecodeGlobalError {
    #[error(transparent)]
    DecodeGlobalType(#[from] DecodeGlobalTypeError),

    #[error("failed decoding Init")]
    DecodeInit(#[from] ParseExpressionError),
}

fn parse_global<R: Read + ?Sized>(reader: &mut R) -> Result<Global, DecodeGlobalError> {
    Ok(Global {
        r#type: GlobalType::decode(reader)?,
        init: decode_expr(reader)?,
    })
}