hex_patch/app/plugins/ui_location/
ui_location_info.rs

1use 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}