diff --git a/server/Cargo.lock b/server/Cargo.lock index 58a0857..7c22aad 100644 --- a/server/Cargo.lock +++ b/server/Cargo.lock @@ -8,15 +8,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" -[[package]] -name = "backend" -version = "0.1.0" -dependencies = [ - "log", - "simplelog", - "usdpl-back", -] - [[package]] name = "base64" version = "0.13.0" @@ -354,6 +345,17 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "112c678d4050afce233f4f2852bb2eb519230b3cf12f33585275537d7e41578d" +[[package]] +name = "kaylon" +version = "0.1.0" +dependencies = [ + "log", + "serde", + "serde_json", + "simplelog", + "usdpl-back", +] + [[package]] name = "libc" version = "0.2.126" @@ -597,6 +599,20 @@ name = "serde" version = "1.0.140" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc855a42c7967b7c369eb5860f7164ef1f6f81c20c7cc1141f2a604e18723b03" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.140" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f2122636b9fe3b81f1cb25099fcf2d3f542cdb1d45940d56c713158884a05da" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] [[package]] name = "serde_json" @@ -943,9 +959,9 @@ dependencies = [ [[package]] name = "usdpl-back" -version = "0.5.3" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d237439986405621b9b6da350aefcfca9e2b808c10695f55f8b80ccc324b2c0" +checksum = "cbbc0781e83ba990f8239142e33173a2d2548701775f3db66702d1af4fd0319a" dependencies = [ "bytes", "tokio", @@ -955,9 +971,9 @@ dependencies = [ [[package]] name = "usdpl-core" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dd726b9f0121d4449082e3ce73586dea0a0448494031833b7b173e4476f0ea5" +checksum = "862153581fac266458521f49e5906a71c1eee1665cb4c7d71e9586bd34b45394" dependencies = [ "base64", ] diff --git a/server/Cargo.toml b/server/Cargo.toml index c8421da..149dc12 100644 --- a/server/Cargo.toml +++ b/server/Cargo.toml @@ -1,12 +1,15 @@ [package] -name = "backend" # TODO replace with plugin name (also in build.sh) +name = "kaylon" # TODO replace with plugin name (also in build.sh) version = "0.1.0" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -usdpl-back = { version = "0.5.3", features = ["decky"] } +usdpl-back = { version = "0.6.0", features = ["decky"] } + +serde = { version = "1.0", features = ["derive"] } +serde_json = "1.0" # logging log = "0.4" diff --git a/server/src/config/about.rs b/server/src/config/about.rs new file mode 100644 index 0000000..cd33035 --- /dev/null +++ b/server/src/config/about.rs @@ -0,0 +1,11 @@ +use serde::{Serialize, Deserialize}; + +#[derive(Serialize, Deserialize)] +pub struct AboutConfig { + pub name: String, + pub version: String, + pub description: String, + pub url: Option, + pub author: Option, + pub license: Option, +} diff --git a/server/src/config/action.rs b/server/src/config/action.rs new file mode 100644 index 0000000..0b14c8e --- /dev/null +++ b/server/src/config/action.rs @@ -0,0 +1,13 @@ +use serde::{Serialize, Deserialize}; + +#[derive(Serialize, Deserialize)] +#[serde(tag = "action")] +pub enum ActionConfig { + #[serde(rename = "command")] + Command(CommandAction), +} + +#[derive(Serialize, Deserialize)] +pub struct CommandAction { + pub run: String, +} diff --git a/server/src/config/base.rs b/server/src/config/base.rs new file mode 100644 index 0000000..c0eb668 --- /dev/null +++ b/server/src/config/base.rs @@ -0,0 +1,13 @@ +use serde::{Serialize, Deserialize}; + +use super::{ElementConfig, AboutConfig}; + +#[derive(Serialize, Deserialize)] +#[serde(tag = "api-version")] +pub enum BaseConfig { + #[serde(rename = "v0.0.0")] + V0 { + items: Vec, + about: AboutConfig, + }, +} diff --git a/server/src/config/button.rs b/server/src/config/button.rs new file mode 100644 index 0000000..e946a7d --- /dev/null +++ b/server/src/config/button.rs @@ -0,0 +1,9 @@ +use serde::{Serialize, Deserialize}; + +use super::ActionConfig; + +#[derive(Serialize, Deserialize)] +pub struct ButtonConfig { + pub title: String, + pub on_click: ActionConfig, +} diff --git a/server/src/config/element.rs b/server/src/config/element.rs new file mode 100644 index 0000000..2b3eacd --- /dev/null +++ b/server/src/config/element.rs @@ -0,0 +1,16 @@ +use serde::{Serialize, Deserialize}; + +use super::{ButtonConfig, ToggleConfig, SliderConfig, ReadingConfig}; + +#[derive(Serialize, Deserialize)] +#[serde(tag = "element")] +pub enum ElementConfig { + #[serde(rename = "button")] + Button(ButtonConfig), + #[serde(rename = "toggle")] + Toggle(ToggleConfig), + #[serde(rename = "slider")] + Slider(SliderConfig), + #[serde(rename = "reading")] + Reading(ReadingConfig), +} diff --git a/server/src/config/mod.rs b/server/src/config/mod.rs new file mode 100644 index 0000000..b9c9089 --- /dev/null +++ b/server/src/config/mod.rs @@ -0,0 +1,59 @@ +mod about; +mod action; +mod base; +mod button; +mod element; +mod reading; +mod slider; +mod toggle; + +pub use about::AboutConfig; +pub use action::{ActionConfig, CommandAction}; +pub use base::BaseConfig; +pub use button::ButtonConfig; +pub use element::ElementConfig; +pub use reading::ReadingConfig; +pub use slider::SliderConfig; +pub use toggle::ToggleConfig; + +#[cfg(test)] +mod test { + use super::*; + + #[test] + fn dump_test() { + let conf = BaseConfig::V0 { + items: vec![ + ElementConfig::Button(ButtonConfig { + title: "Test Button".into(), + on_click: ActionConfig::Command(CommandAction{run: "echo 'hello button'".into()}), + }), + ElementConfig::Toggle(ToggleConfig { + title: "Test Toggle".into(), + description: Some("Toggle description".into()), + on_enable: ActionConfig::Command(CommandAction{run: "echo 'hello toggle 1'".into()}), + on_disable: ActionConfig::Command(CommandAction{run: "echo 'hello toggle 0'".into()}), + }), + ElementConfig::Slider(SliderConfig { + title: "Test Slider".into(), + on_set: ActionConfig::Command(CommandAction{run: "echo 'hello slider'".into()}), + }), + ElementConfig::Reading(ReadingConfig { + title: "Test Reading".into(), + period_ms: 10000, + on_period: ActionConfig::Command(CommandAction{run: "echo 'hello reading'".into()}) + }), + ], + about: AboutConfig { + name: "Test name".into(), + version: "v0.42.0".into(), + description: "Test description".into(), + url: Some("https://github.com/NGnius/kaylon".into()), + author: Some("NGnius ".into()), + license: Some("MIT".into()), + }, + }; + let output = serde_json::to_string_pretty(&conf).unwrap(); + println!("JSON: {}", output); + } +} diff --git a/server/src/config/reading.rs b/server/src/config/reading.rs new file mode 100644 index 0000000..58d4bdb --- /dev/null +++ b/server/src/config/reading.rs @@ -0,0 +1,10 @@ +use serde::{Serialize, Deserialize}; + +use super::ActionConfig; + +#[derive(Serialize, Deserialize)] +pub struct ReadingConfig { + pub title: String, + pub period_ms: usize, + pub on_period: ActionConfig, +} diff --git a/server/src/config/slider.rs b/server/src/config/slider.rs new file mode 100644 index 0000000..9d02b15 --- /dev/null +++ b/server/src/config/slider.rs @@ -0,0 +1,9 @@ +use serde::{Serialize, Deserialize}; + +use super::ActionConfig; + +#[derive(Serialize, Deserialize)] +pub struct SliderConfig { + pub title: String, + pub on_set: ActionConfig, +} diff --git a/server/src/config/toggle.rs b/server/src/config/toggle.rs new file mode 100644 index 0000000..835dfeb --- /dev/null +++ b/server/src/config/toggle.rs @@ -0,0 +1,11 @@ +use serde::{Serialize, Deserialize}; + +use super::ActionConfig; + +#[derive(Serialize, Deserialize)] +pub struct ToggleConfig { + pub title: String, + pub description: Option, + pub on_enable: ActionConfig, + pub on_disable: ActionConfig, +} diff --git a/server/src/main.rs b/server/src/main.rs index b24ba09..747e6f5 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -1,3 +1,5 @@ +mod config; + use simplelog::{WriteLogger, LevelFilter}; use usdpl_back::Instance;