aboutsummaryrefslogtreecommitdiff
path: root/client/src/data
diff options
context:
space:
mode:
author1992414357@qq.com <1992414357@qq.com>2025-06-13 16:25:22 +0800
committer1992414357@qq.com <1992414357@qq.com>2025-06-13 16:25:22 +0800
commit98dad6afa316b9a44ff76b305520339ddc44c789 (patch)
tree9a6d0b566b23f0bab270b68e4766a60349abf18b /client/src/data
parent9e48af01ae56fe813869ada24de291ab98b361e2 (diff)
.
Diffstat (limited to 'client/src/data')
-rw-r--r--client/src/data/layout_data.rs106
-rw-r--r--client/src/data/mod.rs1
2 files changed, 107 insertions, 0 deletions
diff --git a/client/src/data/layout_data.rs b/client/src/data/layout_data.rs
new file mode 100644
index 0000000..f960b41
--- /dev/null
+++ b/client/src/data/layout_data.rs
@@ -0,0 +1,106 @@
+use quick_xml::de::from_str;
+use serde::Deserialize;
+
+#[derive(Debug, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct LayoutXml {
+
+ pub preload: Preload,
+
+ pub events: Events,
+
+ pub layout: Layout,
+}
+
+#[derive(Debug, Deserialize)]
+struct Preload {
+
+ #[serde(rename = "sound", default)]
+ pub sounds: Vec<Asset>,
+
+ #[serde(rename = "image", default)]
+ pub images: Vec<Asset>,
+
+ #[serde(rename = "text", default)]
+ pub texts: Vec<Asset>,
+}
+
+#[derive(Debug, Deserialize)]
+pub struct Asset {
+
+ #[serde(rename = "@src")]
+ pub src: String,
+
+ #[serde(rename = "$text")]
+ pub name: String,
+}
+
+#[derive(Debug, Deserialize)]
+pub struct Events {
+
+ #[serde(rename = "lua_setup", default)]
+ pub lua_setup: Option<String>,
+
+ #[serde(rename = "lua_exit", default)]
+ pub lua_exit: Option<String>,
+
+ #[serde(rename = "lua", default)]
+ pub lua_scripts: Vec<Lua>,
+}
+
+#[derive(Debug, Deserialize)]
+pub struct Lua {
+
+ #[serde(rename = "@id")]
+ pub id: String,
+
+ #[serde(rename = "@src", default)]
+ pub src: Option<String>,
+
+ #[serde(rename = "$text", default)]
+ pub content: Option<String>,
+}
+
+#[derive(Debug, Deserialize)]
+pub struct Layout {
+
+ #[serde(rename = "box_layout")]
+ pub boxes: Vec<BoxLayout>,
+}
+
+#[derive(Debug, Deserialize)]
+pub struct BoxLayout {
+
+ pub button_bind: ButtonBind,
+
+ pub position: String,
+
+ pub pivot: String,
+
+ pub size: String,
+
+ pub name: String,
+}
+
+#[derive(Debug, Deserialize)]
+pub struct ButtonBind {
+
+ #[serde(rename = "on_click")]
+ pub on_click: OnClick,
+}
+
+#[derive(Debug, Deserialize)]
+pub struct OnClick {
+
+ #[serde(rename = "@event")]
+ pub event: String,
+}
+
+impl LayoutXml {
+ pub fn parse_xml(xml: String) -> Result<LayoutXml, quick_xml::DeError> {
+ let wrapped = format!("<root>{}</root>", xml);
+
+ let layout_xml: LayoutXml = from_str(&wrapped)?;
+ Ok(layout_xml)
+ }
+} \ No newline at end of file
diff --git a/client/src/data/mod.rs b/client/src/data/mod.rs
new file mode 100644
index 0000000..0e0a42e
--- /dev/null
+++ b/client/src/data/mod.rs
@@ -0,0 +1 @@
+pub mod layout_data; \ No newline at end of file