1use core::range::Range;
2use serde::{Deserialize, Serialize};
3
4#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
6pub struct MsilRoot {
7 pub items: Vec<Item>,
9}
10
11#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
13pub enum Item {
14 Assembly(Assembly),
16 Module(String),
18 Class(Class),
20 AssemblyExtern(String),
22}
23
24#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
26pub struct Assembly {
27 pub name: String,
28 #[serde(with = "oak_core::serde_range")]
29 pub span: Range<usize>,
30}
31
32#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
34pub struct Class {
35 pub name: String,
36 pub methods: Vec<Method>,
37 #[serde(with = "oak_core::serde_range")]
38 pub span: Range<usize>,
39}
40
41#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
43pub struct Method {
44 pub name: String,
45 pub instructions: Vec<Instruction>,
46 #[serde(with = "oak_core::serde_range")]
47 pub span: Range<usize>,
48}
49
50#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
52pub struct Instruction {
53 pub opcode: String,
54 pub operand: Option<String>,
55 #[serde(with = "oak_core::serde_range")]
56 pub span: Range<usize>,
57}
58
59pub struct MsilAssembly {
60 pub name: String,
61}