hermes_rs 0.1.3

A dependency-free disassembler and assembler for the Hermes bytecode
Documentation
use std::io;

use crate::hermes::decode::decode_u32;
use crate::hermes::encode::encode_u32;
use crate::hermes::Serializable;

#[derive(Debug)]
pub enum CJSModule {
    CJSModuleInt(CJSModuleInt),
    CJSModuleEntry(CJSModuleEntry),
}

#[derive(Debug)]
pub struct CJSModuleEntry {
    pub symbol_id: u32,
    pub offset: u32,
}

impl Serializable for CJSModuleEntry {
    type Version = u32;
    fn size(&self) -> usize {
        8
    }

    fn deserialize<R>(r: &mut R, _version: u32) -> Self
    where
        R: io::Read + io::BufRead + io::Seek,
    {
        CJSModuleEntry {
            symbol_id: decode_u32(r),
            offset: decode_u32(r),
        }
    }

    fn serialize<W>(&self, w: &mut W)
    where
        W: std::io::Write + std::io::Seek,
    {
        encode_u32(w, self.symbol_id);
        encode_u32(w, self.offset);
    }
}

#[derive(Debug)]
pub struct CJSModuleInt {
    pub value: u32,
}

impl Serializable for CJSModuleInt {
    type Version = u32;
    fn size(&self) -> usize {
        4
    }

    fn deserialize<R>(r: &mut R, _version: u32) -> Self
    where
        R: io::Read + io::BufRead + io::Seek,
    {
        CJSModuleInt {
            value: decode_u32(r),
        }
    }

    fn serialize<W>(&self, w: &mut W)
    where
        W: std::io::Write + std::io::Seek,
    {
        encode_u32(w, self.value);
    }
}