avm1_tree/
actions.rs

1use ::serde::{Deserialize, Serialize};
2
3use super::helpers::{buffer_to_hex, hex_to_buffer};
4use super::value::Value;
5
6#[derive(Serialize, Deserialize, Debug, PartialEq, Eq)]
7#[serde(rename_all = "snake_case")]
8pub struct UnknownAction {
9  pub code: u8,
10  #[serde(serialize_with = "buffer_to_hex", deserialize_with = "hex_to_buffer")]
11  pub data: Vec<u8>,
12}
13
14// Action code 0x88
15#[derive(Serialize, Deserialize, Debug, PartialEq, Eq)]
16#[serde(rename_all = "snake_case")]
17pub struct ConstantPool {
18  pub constant_pool: Vec<String>,
19}
20
21// Action code 0x9b
22#[derive(Serialize, Deserialize, Debug, PartialEq, Eq)]
23#[serde(rename_all = "snake_case")]
24pub struct DefineFunction {
25  // Empty string if anonymous
26  pub name: String,
27  pub parameters: Vec<String>,
28  pub body_size: u16,
29}
30
31pub mod define_function2 {
32  use ::serde::{Deserialize, Serialize};
33
34  #[derive(Serialize, Deserialize, Debug, PartialEq, Eq)]
35  #[serde(rename_all = "snake_case")]
36  pub struct Parameter {
37    pub register: u8,
38    pub name: String,
39  }
40}
41
42// Action code 0x8e
43#[derive(Serialize, Deserialize, Debug, PartialEq, Eq)]
44#[serde(rename_all = "snake_case")]
45pub struct DefineFunction2 {
46  // Empty string if anonymous
47  pub name: String,
48  pub register_count: u8,
49  pub preload_this: bool,
50  pub suppress_this: bool,
51  pub preload_arguments: bool,
52  pub suppress_arguments: bool,
53  pub preload_super: bool,
54  pub suppress_super: bool,
55  pub preload_root: bool,
56  pub preload_parent: bool,
57  pub preload_global: bool,
58  pub parameters: Vec<define_function2::Parameter>,
59  pub body_size: u16,
60}
61
62// Action code 0x83
63#[derive(Serialize, Deserialize, Debug, PartialEq, Eq)]
64#[serde(rename_all = "snake_case")]
65pub struct GetUrl {
66  pub url: String,
67  pub target: String,
68}
69
70pub mod get_url2 {
71  use ::serde::{Deserialize, Serialize};
72
73  #[derive(Serialize, Deserialize, Debug, PartialEq, Eq)]
74  #[serde(rename_all = "kebab-case")]
75  pub enum Method {
76    None,
77    Get,
78    Post,
79  }
80}
81
82// Action code 0x9a
83#[derive(Serialize, Deserialize, Debug, PartialEq, Eq)]
84#[serde(rename_all = "snake_case")]
85pub struct GetUrl2 {
86  pub method: get_url2::Method,
87  pub load_target: bool,
88  pub load_variables: bool,
89}
90
91// Action code 0x81
92#[derive(Serialize, Deserialize, Debug, PartialEq, Eq)]
93#[serde(rename_all = "snake_case")]
94pub struct GotoFrame {
95  pub frame: usize,
96}
97
98// Action code 0x9f
99#[derive(Serialize, Deserialize, Debug, PartialEq, Eq)]
100#[serde(rename_all = "snake_case")]
101pub struct GotoFrame2 {
102  pub play: bool,
103  pub scene_bias: usize,
104}
105
106// Action code 0x8c
107#[derive(Serialize, Deserialize, Debug, PartialEq, Eq)]
108#[serde(rename_all = "snake_case")]
109pub struct GoToLabel {
110  pub label: String,
111}
112
113// Action code 0x9d
114#[derive(Serialize, Deserialize, Debug, PartialEq, Eq)]
115#[serde(rename_all = "snake_case")]
116pub struct If {
117  pub offset: i16,
118}
119
120// Action code 0x99
121#[derive(Serialize, Deserialize, Debug, PartialEq, Eq)]
122#[serde(rename_all = "snake_case")]
123pub struct Jump {
124  pub offset: i16,
125}
126
127// Action code 0x96
128#[derive(Serialize, Deserialize, Debug, PartialEq, Eq)]
129#[serde(rename_all = "snake_case")]
130pub struct Push {
131  pub values: Vec<Value>,
132}
133
134// Action code 0x8b
135#[derive(Serialize, Deserialize, Debug, PartialEq, Eq)]
136#[serde(rename_all = "snake_case")]
137pub struct SetTarget {
138  pub target_name: String,
139}
140
141// Action code 0x87
142#[derive(Serialize, Deserialize, Debug, PartialEq, Eq)]
143#[serde(rename_all = "snake_case")]
144pub struct StoreRegister {
145  pub register: u8,
146}
147
148pub mod r#try {
149  use ::serde::{Deserialize, Serialize};
150
151  #[derive(Serialize, Deserialize, Debug, PartialEq, Eq)]
152  #[serde(tag = "type", content = "target", rename_all = "kebab-case")]
153  pub enum CatchTarget {
154    Register(u8),
155    Variable(String),
156  }
157}
158
159// Action code 0x8f
160#[derive(Serialize, Deserialize, Debug, PartialEq, Eq)]
161#[serde(rename_all = "snake_case")]
162pub struct Try {
163  pub try_size: u16,
164  pub catch_target: r#try::CatchTarget,
165  #[serde(skip_serializing_if = "Option::is_none")]
166  pub catch_size: Option<u16>,
167  #[serde(skip_serializing_if = "Option::is_none")]
168  pub finally_size: Option<u16>,
169}
170
171// Action code 0x8a
172#[derive(Serialize, Deserialize, Debug, PartialEq, Eq)]
173#[serde(rename_all = "snake_case")]
174pub struct WaitForFrame {
175  pub frame: usize,
176  pub skip_count: usize,
177}
178
179// Action code 0x8d
180#[derive(Serialize, Deserialize, Debug, PartialEq, Eq)]
181#[serde(rename_all = "snake_case")]
182pub struct WaitForFrame2 {
183  pub skip_count: usize,
184}
185
186// Action code 0x89
187#[derive(Serialize, Deserialize, Debug, PartialEq, Eq)]
188#[serde(rename_all = "snake_case")]
189pub struct StrictMode {
190  pub mode: u8,
191}
192
193// Action code 0x94
194#[derive(Serialize, Deserialize, Debug, PartialEq, Eq)]
195#[serde(rename_all = "snake_case")]
196pub struct With {
197  pub with_size: u16,
198}