hex_patch/app/plugins/ui_location/
ui_location_info.rs1use mlua::IntoLua;
2
3#[derive(Debug, Clone, PartialEq, Eq)]
4pub enum UiLocationInfo {
5 AddressView {
6 file_address: Option<u64>,
7 },
8 HexView {
9 file_address: Option<u64>,
10 high: Option<bool>,
11 virtual_address: Option<u64>,
12 byte: Option<u8>,
13 },
14 TextView {
15 file_address: Option<u64>,
16 virtual_address: Option<u64>,
17 byte: Option<u8>,
18 character: Option<char>,
19 },
20 AssemblyView {
21 section: Option<String>,
22 file_address: Option<u64>,
23 virtual_address: Option<u64>,
24 instruction: Option<String>,
25 },
26 StatusBar,
27 ScrollBar,
28 Popup {
29 name: String,
30 },
31}
32
33impl IntoLua for UiLocationInfo {
34 fn into_lua(self, lua: &mlua::Lua) -> mlua::Result<mlua::Value> {
35 let ret = lua.create_table()?;
36 match self {
37 UiLocationInfo::AddressView { file_address } => {
38 ret.set("type", "AddressView")?;
39 ret.set("file_address", file_address)?;
40 }
41 UiLocationInfo::HexView {
42 file_address,
43 high,
44 virtual_address,
45 byte,
46 } => {
47 ret.set("type", "HexView")?;
48 ret.set("file_address", file_address)?;
49 ret.set("high", high)?;
50 ret.set("virtual_address", virtual_address)?;
51 ret.set("byte", byte)?;
52 }
53 UiLocationInfo::TextView {
54 file_address,
55 virtual_address,
56 byte,
57 character,
58 } => {
59 ret.set("type", "TextView")?;
60 ret.set("file_address", file_address)?;
61 ret.set("virtual_address", virtual_address)?;
62 ret.set("byte", byte)?;
63 ret.set("character", character.map(|c| c.to_string()))?;
64 }
65 UiLocationInfo::AssemblyView {
66 section,
67 file_address,
68 virtual_address,
69 instruction,
70 } => {
71 ret.set("type", "AssemblyView")?;
72 ret.set("section", section)?;
73 ret.set("file_address", file_address)?;
74 ret.set("virtual_address", virtual_address)?;
75 ret.set("instruction", instruction)?;
76 }
77 UiLocationInfo::StatusBar => {
78 ret.set("type", "StatusBar")?;
79 }
80 UiLocationInfo::ScrollBar => {
81 ret.set("type", "ScrollBar")?;
82 }
83 UiLocationInfo::Popup { name } => {
84 ret.set("type", "Popup")?;
85 ret.set("name", name)?;
86 }
87 }
88 Ok(mlua::Value::Table(ret))
89 }
90}