EOF_Parser/
lib.rs

1//! # EOF Parser
2
3#![warn(
4    missing_debug_implementations,
5    unreachable_pub,
6    clippy::missing_const_for_fn,
7    rustdoc::all
8)]
9#![cfg_attr(not(test), warn(unused_crate_dependencies))]
10#![deny(unused_must_use, rust_2018_idioms)]
11#![cfg_attr(docsrs, feature(doc_cfg, doc_auto_cfg))]
12
13pub mod constants;
14pub mod error;
15pub mod parser;
16pub mod prelude;
17
18#[derive(Debug, PartialEq, Clone)]
19pub struct EOFContainer {
20    pub header: EOFHeader,
21    pub body: Body,
22}
23
24#[derive(Debug, PartialEq, Clone, Copy)]
25pub struct EOFHeader {
26    pub magic: [u8; 2],
27    pub version: u8,
28    pub kind_type: u8,
29    pub type_size: u16,
30    pub kind_code: u8,
31    pub num_code_sections: u16,
32    pub code_size: u16,
33    pub kind_container: u8,
34    pub num_container_sections: u16,
35    pub container_size: u8,
36    pub kind_data: u8,
37    pub data_size: u16,
38    pub terminator: u8,
39}
40
41#[derive(Debug, PartialEq, Clone)]
42pub struct Body {
43    pub types_section: Vec<TypeMetadata>,
44    pub inputs: u8,
45    pub outputs: u8,
46    pub max_stack_height: u16,
47    pub code_section: Vec<u8>,
48    pub container_section: Vec<u8>,
49    pub data_section: Vec<u8>,
50}
51
52#[derive(Debug, PartialEq, Clone)]
53pub struct TypesSection {
54    pub items: Vec<TypeMetadata>,
55}
56
57#[derive(Debug, PartialEq, Clone)]
58pub struct TypeMetadata {
59    pub inputs: u8,
60    pub outputs: u8,
61    pub max_stack_height: u16,
62}