class_rs/
structs.rs

1use crate::enums::{
2    AccessFlag, Attribute, ElementValue, StackMapFrameType, TargetInfo, VerificationType,
3};
4
5#[derive(Debug, Clone)]
6pub struct MemberData {
7    pub access_flags: Vec<AccessFlag>,
8    pub name: u16,
9    pub descriptor: u16,
10    pub attributes: Vec<Attribute>,
11}
12
13#[derive(Debug, Clone)]
14pub struct Field(pub MemberData);
15
16#[derive(Debug, Clone)]
17pub struct Method(pub MemberData);
18
19#[derive(Debug, Clone)]
20pub struct LineNumber {
21    pub start_pc: u16,
22    pub line_number: u16,
23}
24
25#[derive(Debug, Clone)]
26pub struct Annotation {
27    pub type_index: u16,
28    pub element_value_pairs: Vec<ElementValuePair>,
29}
30
31#[derive(Debug, Clone)]
32pub struct ElementValuePair {
33    pub element_name_index: u16,
34    pub value: ElementValue,
35}
36
37#[derive(Debug, Clone)]
38pub struct LookupSwitchPair {
39    pub value: u32,
40    pub target: u32,
41}
42
43#[derive(Debug, Clone)]
44pub struct BootstrapMethod {
45    pub bootstrap_method_ref: u16,
46    pub bootstrap_arguments: Vec<u16>,
47}
48
49#[derive(Debug, Clone)]
50pub struct InnerClass {
51    pub inner_class_info_index: u16,
52    pub outer_class_info_index: u16,
53    pub inner_name_index: u16,
54    pub inner_class_access_flags: Vec<AccessFlag>,
55}
56
57#[derive(Debug, Clone)]
58pub struct StackMapFrame {
59    pub frame_type: StackMapFrameType,
60    pub offset_delta: u16,
61    pub locals: Vec<VerificationType>,
62    pub stack: Vec<VerificationType>,
63}
64
65#[derive(Debug, Clone)]
66pub struct LocalVariable {
67    pub start_pc: u16,
68    pub length: u16,
69    pub name_index: u16,
70    pub descriptor_index: u16,
71    pub index: u16,
72}
73
74#[derive(Debug, Clone)]
75pub struct LocalVariableType {
76    pub start_pc: u16,
77    pub length: u16,
78    pub name_index: u16,
79    pub signature_index: u16,
80    pub index: u16,
81}
82
83#[derive(Debug, Clone)]
84pub struct MethodParameter {
85    pub name_index: u16,
86    pub access_flags: Vec<AccessFlag>,
87}
88
89#[derive(Debug, Clone)]
90pub struct ModuleRequires {
91    pub requires_index: u16,
92    pub requires_flags: Vec<AccessFlag>,
93    pub requires_version_index: u16,
94}
95
96#[derive(Debug, Clone)]
97pub struct ModuleExports {
98    pub exports_index: u16,
99    pub exports_flags: Vec<AccessFlag>,
100    pub exports_to_index: Vec<u16>,
101}
102
103#[derive(Debug, Clone)]
104pub struct ModuleOpens {
105    pub opens_index: u16,
106    pub opens_flags: Vec<AccessFlag>,
107    pub opens_to_index: Vec<u16>,
108}
109
110#[derive(Debug, Clone)]
111pub struct ModuleProvides {
112    pub provides_index: u16,
113    pub provides_with_index: Vec<u16>,
114}
115
116#[derive(Debug, Clone)]
117pub struct RecordComponent {
118    pub name_index: u16,
119    pub descriptor_index: u16,
120    pub attributes: Vec<Attribute>,
121}
122
123#[derive(Debug, Clone)]
124pub struct LocalVar {
125    pub start_pc: u16,
126    pub length: u16,
127    pub index: u16,
128}
129
130#[derive(Debug, Clone)]
131pub struct TypePath {
132    pub type_path_kind: u8,
133    pub type_argument_index: u8,
134}
135
136#[derive(Debug, Clone)]
137pub struct TypeAnnotation {
138    pub target_info: TargetInfo,
139    pub target_path: Vec<TypePath>,
140    pub annotation: Annotation,
141}
142
143#[derive(Debug, Clone)]
144pub struct ExceptionTableEntry {
145    pub start_pc: u16,
146    pub end_pc: u16,
147    pub handler_pc: u16,
148    pub catch_type: u16,
149}