From a210ab86ee43dea3b4d9d0f2af5750c5a4adf096 Mon Sep 17 00:00:00 2001 From: "1992414357@qq.com" <1992414357@qq.com> Date: Fri, 13 Jun 2025 19:20:06 +0800 Subject: . --- apps/client/src/data/layout_data.rs | 106 ++++++++++++++++++++++++++++++++++++ apps/client/src/data/mod.rs | 1 + 2 files changed, 107 insertions(+) create mode 100644 apps/client/src/data/layout_data.rs create mode 100644 apps/client/src/data/mod.rs (limited to 'apps/client/src/data') diff --git a/apps/client/src/data/layout_data.rs b/apps/client/src/data/layout_data.rs new file mode 100644 index 0000000..f960b41 --- /dev/null +++ b/apps/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, + + #[serde(rename = "image", default)] + pub images: Vec, + + #[serde(rename = "text", default)] + pub texts: Vec, +} + +#[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, + + #[serde(rename = "lua_exit", default)] + pub lua_exit: Option, + + #[serde(rename = "lua", default)] + pub lua_scripts: Vec, +} + +#[derive(Debug, Deserialize)] +pub struct Lua { + + #[serde(rename = "@id")] + pub id: String, + + #[serde(rename = "@src", default)] + pub src: Option, + + #[serde(rename = "$text", default)] + pub content: Option, +} + +#[derive(Debug, Deserialize)] +pub struct Layout { + + #[serde(rename = "box_layout")] + pub boxes: Vec, +} + +#[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 { + let wrapped = format!("{}", xml); + + let layout_xml: LayoutXml = from_str(&wrapped)?; + Ok(layout_xml) + } +} \ No newline at end of file diff --git a/apps/client/src/data/mod.rs b/apps/client/src/data/mod.rs new file mode 100644 index 0000000..0e0a42e --- /dev/null +++ b/apps/client/src/data/mod.rs @@ -0,0 +1 @@ +pub mod layout_data; \ No newline at end of file -- cgit