Create initial JSON API format
This commit is contained in:
parent
14ff848b0a
commit
4a272e53ee
12 changed files with 187 additions and 15 deletions
42
server/Cargo.lock
generated
42
server/Cargo.lock
generated
|
@ -8,15 +8,6 @@ version = "1.1.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
|
checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "backend"
|
|
||||||
version = "0.1.0"
|
|
||||||
dependencies = [
|
|
||||||
"log",
|
|
||||||
"simplelog",
|
|
||||||
"usdpl-back",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "base64"
|
name = "base64"
|
||||||
version = "0.13.0"
|
version = "0.13.0"
|
||||||
|
@ -354,6 +345,17 @@ version = "1.0.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "112c678d4050afce233f4f2852bb2eb519230b3cf12f33585275537d7e41578d"
|
checksum = "112c678d4050afce233f4f2852bb2eb519230b3cf12f33585275537d7e41578d"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "kaylon"
|
||||||
|
version = "0.1.0"
|
||||||
|
dependencies = [
|
||||||
|
"log",
|
||||||
|
"serde",
|
||||||
|
"serde_json",
|
||||||
|
"simplelog",
|
||||||
|
"usdpl-back",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "libc"
|
name = "libc"
|
||||||
version = "0.2.126"
|
version = "0.2.126"
|
||||||
|
@ -597,6 +599,20 @@ name = "serde"
|
||||||
version = "1.0.140"
|
version = "1.0.140"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "fc855a42c7967b7c369eb5860f7164ef1f6f81c20c7cc1141f2a604e18723b03"
|
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]]
|
[[package]]
|
||||||
name = "serde_json"
|
name = "serde_json"
|
||||||
|
@ -943,9 +959,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "usdpl-back"
|
name = "usdpl-back"
|
||||||
version = "0.5.3"
|
version = "0.6.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "6d237439986405621b9b6da350aefcfca9e2b808c10695f55f8b80ccc324b2c0"
|
checksum = "cbbc0781e83ba990f8239142e33173a2d2548701775f3db66702d1af4fd0319a"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bytes",
|
"bytes",
|
||||||
"tokio",
|
"tokio",
|
||||||
|
@ -955,9 +971,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "usdpl-core"
|
name = "usdpl-core"
|
||||||
version = "0.5.0"
|
version = "0.6.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "5dd726b9f0121d4449082e3ce73586dea0a0448494031833b7b173e4476f0ea5"
|
checksum = "862153581fac266458521f49e5906a71c1eee1665cb4c7d71e9586bd34b45394"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"base64",
|
"base64",
|
||||||
]
|
]
|
||||||
|
|
|
@ -1,12 +1,15 @@
|
||||||
[package]
|
[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"
|
version = "0.1.0"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|
||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
[dependencies]
|
[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
|
# logging
|
||||||
log = "0.4"
|
log = "0.4"
|
||||||
|
|
11
server/src/config/about.rs
Normal file
11
server/src/config/about.rs
Normal file
|
@ -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<String>,
|
||||||
|
pub author: Option<String>,
|
||||||
|
pub license: Option<String>,
|
||||||
|
}
|
13
server/src/config/action.rs
Normal file
13
server/src/config/action.rs
Normal file
|
@ -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,
|
||||||
|
}
|
13
server/src/config/base.rs
Normal file
13
server/src/config/base.rs
Normal file
|
@ -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<ElementConfig>,
|
||||||
|
about: AboutConfig,
|
||||||
|
},
|
||||||
|
}
|
9
server/src/config/button.rs
Normal file
9
server/src/config/button.rs
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
use serde::{Serialize, Deserialize};
|
||||||
|
|
||||||
|
use super::ActionConfig;
|
||||||
|
|
||||||
|
#[derive(Serialize, Deserialize)]
|
||||||
|
pub struct ButtonConfig {
|
||||||
|
pub title: String,
|
||||||
|
pub on_click: ActionConfig,
|
||||||
|
}
|
16
server/src/config/element.rs
Normal file
16
server/src/config/element.rs
Normal file
|
@ -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),
|
||||||
|
}
|
59
server/src/config/mod.rs
Normal file
59
server/src/config/mod.rs
Normal file
|
@ -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 <ngniusness@gmail.com>".into()),
|
||||||
|
license: Some("MIT".into()),
|
||||||
|
},
|
||||||
|
};
|
||||||
|
let output = serde_json::to_string_pretty(&conf).unwrap();
|
||||||
|
println!("JSON: {}", output);
|
||||||
|
}
|
||||||
|
}
|
10
server/src/config/reading.rs
Normal file
10
server/src/config/reading.rs
Normal file
|
@ -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,
|
||||||
|
}
|
9
server/src/config/slider.rs
Normal file
9
server/src/config/slider.rs
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
use serde::{Serialize, Deserialize};
|
||||||
|
|
||||||
|
use super::ActionConfig;
|
||||||
|
|
||||||
|
#[derive(Serialize, Deserialize)]
|
||||||
|
pub struct SliderConfig {
|
||||||
|
pub title: String,
|
||||||
|
pub on_set: ActionConfig,
|
||||||
|
}
|
11
server/src/config/toggle.rs
Normal file
11
server/src/config/toggle.rs
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
use serde::{Serialize, Deserialize};
|
||||||
|
|
||||||
|
use super::ActionConfig;
|
||||||
|
|
||||||
|
#[derive(Serialize, Deserialize)]
|
||||||
|
pub struct ToggleConfig {
|
||||||
|
pub title: String,
|
||||||
|
pub description: Option<String>,
|
||||||
|
pub on_enable: ActionConfig,
|
||||||
|
pub on_disable: ActionConfig,
|
||||||
|
}
|
|
@ -1,3 +1,5 @@
|
||||||
|
mod config;
|
||||||
|
|
||||||
use simplelog::{WriteLogger, LevelFilter};
|
use simplelog::{WriteLogger, LevelFilter};
|
||||||
|
|
||||||
use usdpl_back::Instance;
|
use usdpl_back::Instance;
|
||||||
|
|
Reference in a new issue