From 15636ad6473ada49393ce290852263b34d4ab427 Mon Sep 17 00:00:00 2001 From: bytedream Date: Tue, 7 Apr 2026 17:08:42 +0200 Subject: [PATCH 1/2] add support to generate resource json schema --- .cargo/config.toml | 5 +- Cargo.lock | 48 ++++++++++++++++--- Cargo.toml | 5 +- client/core/rs/Cargo.toml | 2 + client/core/rs/src/api/execute/action.rs | 2 + client/core/rs/src/api/execute/alerter.rs | 2 + client/core/rs/src/api/execute/build.rs | 3 ++ client/core/rs/src/api/execute/deployment.rs | 10 ++++ client/core/rs/src/api/execute/maintenance.rs | 5 ++ client/core/rs/src/api/execute/mod.rs | 2 + client/core/rs/src/api/execute/procedure.rs | 2 + client/core/rs/src/api/execute/repo.rs | 7 +++ client/core/rs/src/api/execute/server.rs | 21 ++++++++ client/core/rs/src/api/execute/stack.rs | 14 ++++++ client/core/rs/src/api/execute/swarm.rs | 10 ++++ client/core/rs/src/api/execute/sync.rs | 1 + client/core/rs/src/api/write/sync.rs | 1 + client/core/rs/src/entities/action.rs | 4 ++ client/core/rs/src/entities/alert.rs | 5 ++ client/core/rs/src/entities/alerter.rs | 10 ++++ client/core/rs/src/entities/build.rs | 9 ++++ client/core/rs/src/entities/builder.rs | 22 ++++++--- client/core/rs/src/entities/config/mod.rs | 3 ++ client/core/rs/src/entities/deployment.rs | 15 ++++++ client/core/rs/src/entities/docker/node.rs | 2 + client/core/rs/src/entities/mod.rs | 13 +++++ client/core/rs/src/entities/permission.rs | 3 ++ client/core/rs/src/entities/procedure.rs | 11 +++++ client/core/rs/src/entities/repo.rs | 12 +++++ client/core/rs/src/entities/server.rs | 4 ++ client/core/rs/src/entities/stack.rs | 15 ++++++ client/core/rs/src/entities/swarm.rs | 8 ++++ client/core/rs/src/entities/sync.rs | 4 ++ client/core/rs/src/entities/toml.rs | 22 +++++++++ client/core/rs/src/entities/variable.rs | 1 + xtask/Cargo.toml | 15 ++++++ xtask/src/generate/mod.rs | 17 +++++++ xtask/src/generate/resource_json_schema.rs | 46 ++++++++++++++++++ xtask/src/main.rs | 29 +++++++++++ 39 files changed, 395 insertions(+), 15 deletions(-) create mode 100644 xtask/Cargo.toml create mode 100644 xtask/src/generate/mod.rs create mode 100644 xtask/src/generate/resource_json_schema.rs create mode 100644 xtask/src/main.rs diff --git a/.cargo/config.toml b/.cargo/config.toml index dec5ad252..4ceeac575 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -1,2 +1,5 @@ +[alias] +xtask = "run --package xtask --" + [build] -rustflags = ["-Wunused-crate-dependencies"] \ No newline at end of file +rustflags = ["-Wunused-crate-dependencies"] diff --git a/Cargo.lock b/Cargo.lock index 134f769d2..e23320070 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2888,6 +2888,7 @@ dependencies = [ "partial_derive2", "rand 0.10.0", "reqwest 0.13.2", + "schemars 1.2.1", "serde", "serde_json", "serde_qs", @@ -3964,8 +3965,7 @@ dependencies = [ [[package]] name = "partial_derive2" version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aea8d1d439a598918da9f57e336712feca21d8b1f0935abab2ec1a725fe4477" +source = "git+https://github.com/mbecker20/partial_derive2.git?rev=46bd8dcfc768700df427fa7f6b1737481cf2e4ea#46bd8dcfc768700df427fa7f6b1737481cf2e4ea" dependencies = [ "partial_derive2_derive", ] @@ -3973,8 +3973,7 @@ dependencies = [ [[package]] name = "partial_derive2_derive" version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d60d971bb4035146776bdf7b516e24a7ed6f6d8005ba8f224ffbb51ada3c8144" +source = "git+https://github.com/mbecker20/partial_derive2.git?rev=46bd8dcfc768700df427fa7f6b1737481cf2e4ea#46bd8dcfc768700df427fa7f6b1737481cf2e4ea" dependencies = [ "proc-macro2", "quote", @@ -4828,16 +4827,30 @@ dependencies = [ [[package]] name = "schemars" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54e910108742c57a770f492731f99be216a52fadd361b06c8fb59d74ccc267d2" +checksum = "a2b42f36aa1cd011945615b92222f6bf73c599a102a300334cd7f8dbeec726cc" dependencies = [ "dyn-clone", + "indexmap 2.13.0", "ref-cast", + "schemars_derive", "serde", "serde_json", ] +[[package]] +name = "schemars_derive" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d115b50f4aaeea07e79c1912f645c7513d81715d0420f8bc77a18c6260b307f" +dependencies = [ + "proc-macro2", + "quote", + "serde_derive_internals", + "syn", +] + [[package]] name = "scopeguard" version = "1.2.0" @@ -4957,6 +4970,17 @@ dependencies = [ "syn", ] +[[package]] +name = "serde_derive_internals" +version = "0.29.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "serde_json" version = "1.0.149" @@ -5047,7 +5071,7 @@ dependencies = [ "indexmap 1.9.3", "indexmap 2.13.0", "schemars 0.9.0", - "schemars 1.2.0", + "schemars 1.2.1", "serde_core", "serde_json", "serde_with_macros", @@ -7166,6 +7190,16 @@ version = "0.13.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "66fee0b777b0f5ac1c69bb06d361268faafa61cd4682ae064a171c16c433e9e4" +[[package]] +name = "xtask" +version = "2.1.1" +dependencies = [ + "anyhow", + "clap", + "komodo_client", + "schemars 1.2.1", +] + [[package]] name = "yoke" version = "0.8.1" diff --git a/Cargo.toml b/Cargo.toml index c95420039..6fad2992e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,6 +3,7 @@ resolver = "2" members = [ "bin/*", "lib/*", + "xtask", "client/core/rs", "client/periphery/rs", ] @@ -41,7 +42,8 @@ mogh_auth_server = "1.2.13" mogh_secret_file = "1.0.1" mogh_validations = "1.0.1" mogh_rate_limit = "1.0.1" -partial_derive2 = "0.4.5" +# partial_derive2 = "0.4.5" +partial_derive2 = { git = "https://github.com/mbecker20/partial_derive2.git", rev = "46bd8dcfc768700df427fa7f6b1737481cf2e4ea" } mongo_indexed = "2.0.2" mogh_resolver = "1.0.0" mogh_config = "1.0.5" @@ -129,6 +131,7 @@ croner = "3.0.1" # MISC async-compression = { version = "0.4.41", features = ["tokio", "gzip"] } +schemars = { version = "1.2.1", features = ["indexmap2"] } derive_builder = "0.20.2" comfy-table = "7.2.2" typeshare = "1.0.5" diff --git a/client/core/rs/Cargo.toml b/client/core/rs/Cargo.toml index 8ffb2944f..2523df66d 100644 --- a/client/core/rs/Cargo.toml +++ b/client/core/rs/Cargo.toml @@ -14,6 +14,7 @@ repository.workspace = true blocking = ["reqwest/blocking"] mongo = ["dep:mongo_indexed"] utoipa = ["dep:utoipa", "mogh_auth_client/utoipa", "mogh_error/utoipa"] +schemars = ["dep:schemars"] logger = ["dep:mogh_logger"] cli = ["logger", "dep:mogh_pki",] core = ["mongo", "utoipa", "logger", "dep:mogh_server"] @@ -33,6 +34,7 @@ partial_derive2.workspace = true mogh_resolver.workspace = true # external ipnetwork = { workspace = true, optional = true } +schemars = { workspace = true, optional = true } utoipa = { workspace = true, optional = true } tokio-tungstenite.workspace = true derive_builder.workspace = true diff --git a/client/core/rs/src/api/execute/action.rs b/client/core/rs/src/api/execute/action.rs index 48f243b43..02fd43452 100644 --- a/client/core/rs/src/api/execute/action.rs +++ b/client/core/rs/src/api/execute/action.rs @@ -28,6 +28,7 @@ pub fn run_action() {} Debug, Clone, PartialEq, Serialize, Deserialize, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(Update)] #[error(mogh_error::Error)] @@ -68,6 +69,7 @@ pub fn batch_run_action() {} Debug, Clone, PartialEq, Serialize, Deserialize, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(BatchExecutionResponse)] #[error(mogh_error::Error)] diff --git a/client/core/rs/src/api/execute/alerter.rs b/client/core/rs/src/api/execute/alerter.rs index 9f6b96b43..6d66bd4de 100644 --- a/client/core/rs/src/api/execute/alerter.rs +++ b/client/core/rs/src/api/execute/alerter.rs @@ -27,6 +27,7 @@ pub fn test_alerter() {} Serialize, Deserialize, Debug, Clone, PartialEq, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(Update)] #[error(mogh_error::Error)] @@ -56,6 +57,7 @@ pub fn send_alert() {} Serialize, Deserialize, Debug, Clone, PartialEq, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(Update)] #[error(mogh_error::Error)] diff --git a/client/core/rs/src/api/execute/build.rs b/client/core/rs/src/api/execute/build.rs index 750c6bbe1..a0bc4a6f5 100644 --- a/client/core/rs/src/api/execute/build.rs +++ b/client/core/rs/src/api/execute/build.rs @@ -39,6 +39,7 @@ pub fn run_build() {} Debug, Clone, PartialEq, Serialize, Deserialize, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(Update)] #[error(mogh_error::Error)] @@ -67,6 +68,7 @@ pub fn batch_run_build() {} Debug, Clone, PartialEq, Serialize, Deserialize, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(BatchExecutionResponse)] #[error(mogh_error::Error)] @@ -106,6 +108,7 @@ pub fn cancel_build() {} Serialize, Deserialize, Debug, Clone, PartialEq, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(Update)] #[error(mogh_error::Error)] diff --git a/client/core/rs/src/api/execute/deployment.rs b/client/core/rs/src/api/execute/deployment.rs index ad4376a13..a4099685e 100644 --- a/client/core/rs/src/api/execute/deployment.rs +++ b/client/core/rs/src/api/execute/deployment.rs @@ -34,6 +34,7 @@ pub fn deploy() {} Serialize, Deserialize, Debug, Clone, PartialEq, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(Update)] #[error(mogh_error::Error)] @@ -68,6 +69,7 @@ pub fn batch_deploy() {} Serialize, Deserialize, Debug, Clone, PartialEq, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(BatchExecutionResponse)] #[error(mogh_error::Error)] @@ -105,6 +107,7 @@ pub fn pull_deployment() {} Serialize, Deserialize, Debug, Clone, PartialEq, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(Update)] #[error(mogh_error::Error)] @@ -135,6 +138,7 @@ pub fn start_deployment() {} Serialize, Deserialize, Debug, Clone, PartialEq, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(Update)] #[error(mogh_error::Error)] @@ -165,6 +169,7 @@ pub fn restart_deployment() {} Serialize, Deserialize, Debug, Clone, PartialEq, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(Update)] #[error(mogh_error::Error)] @@ -195,6 +200,7 @@ pub fn pause_deployment() {} Serialize, Deserialize, Debug, Clone, PartialEq, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(Update)] #[error(mogh_error::Error)] @@ -228,6 +234,7 @@ pub fn unpause_deployment() {} Serialize, Deserialize, Debug, Clone, PartialEq, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(Update)] #[error(mogh_error::Error)] @@ -258,6 +265,7 @@ pub fn stop_deployment() {} Serialize, Deserialize, Debug, Clone, PartialEq, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(Update)] #[error(mogh_error::Error)] @@ -295,6 +303,7 @@ pub fn destroy_deployment() {} Serialize, Deserialize, Debug, Clone, PartialEq, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(Update)] #[error(mogh_error::Error)] @@ -327,6 +336,7 @@ pub fn batch_destroy_deployment() {} Serialize, Deserialize, Debug, Clone, PartialEq, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(BatchExecutionResponse)] #[error(mogh_error::Error)] diff --git a/client/core/rs/src/api/execute/maintenance.rs b/client/core/rs/src/api/execute/maintenance.rs index 1d3053221..c93f2043b 100644 --- a/client/core/rs/src/api/execute/maintenance.rs +++ b/client/core/rs/src/api/execute/maintenance.rs @@ -28,6 +28,7 @@ pub fn clear_repo_cache() {} Debug, Clone, PartialEq, Serialize, Deserialize, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(Update)] #[error(mogh_error::Error)] @@ -60,6 +61,7 @@ pub fn backup_core_database() {} Debug, Clone, PartialEq, Serialize, Deserialize, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(Update)] #[error(mogh_error::Error)] @@ -92,6 +94,7 @@ pub fn global_auto_update() {} Debug, Clone, PartialEq, Serialize, Deserialize, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(Update)] #[error(mogh_error::Error)] @@ -125,6 +128,7 @@ pub fn rotate_all_server_keys() {} Debug, Clone, PartialEq, Serialize, Deserialize, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(Update)] #[error(mogh_error::Error)] @@ -155,6 +159,7 @@ pub fn rotate_core_keys() {} Debug, Clone, PartialEq, Serialize, Deserialize, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(Update)] #[error(mogh_error::Error)] diff --git a/client/core/rs/src/api/execute/mod.rs b/client/core/rs/src/api/execute/mod.rs index c3674cc78..963a03559 100644 --- a/client/core/rs/src/api/execute/mod.rs +++ b/client/core/rs/src/api/execute/mod.rs @@ -78,6 +78,7 @@ pub trait KomodoExecuteRequest: HasResponse {} utoipa::ToSchema )) )] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[serde(tag = "type", content = "params")] pub enum Execution { /// The "null" execution. Does nothing. @@ -215,6 +216,7 @@ pub enum Execution { #[typeshare] #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Parser)] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] pub struct Sleep { #[serde(default)] pub duration_ms: I64, diff --git a/client/core/rs/src/api/execute/procedure.rs b/client/core/rs/src/api/execute/procedure.rs index 27745f13d..c04ce92ae 100644 --- a/client/core/rs/src/api/execute/procedure.rs +++ b/client/core/rs/src/api/execute/procedure.rs @@ -27,6 +27,7 @@ pub fn run_procedure() {} Debug, Clone, PartialEq, Serialize, Deserialize, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(Update)] #[error(mogh_error::Error)] @@ -55,6 +56,7 @@ pub fn batch_run_procedure() {} Debug, Clone, PartialEq, Serialize, Deserialize, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(BatchExecutionResponse)] #[error(mogh_error::Error)] diff --git a/client/core/rs/src/api/execute/repo.rs b/client/core/rs/src/api/execute/repo.rs index fe1cf2d0c..8af2a2f71 100644 --- a/client/core/rs/src/api/execute/repo.rs +++ b/client/core/rs/src/api/execute/repo.rs @@ -35,6 +35,7 @@ pub fn clone_repo() {} Serialize, Deserialize, Debug, Clone, PartialEq, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(Update)] #[error(mogh_error::Error)] @@ -63,6 +64,7 @@ pub fn batch_clone_repo() {} Debug, Clone, PartialEq, Serialize, Deserialize, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(BatchExecutionResponse)] #[error(mogh_error::Error)] @@ -105,6 +107,7 @@ pub fn pull_repo() {} Serialize, Deserialize, Debug, Clone, PartialEq, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(Update)] #[error(mogh_error::Error)] @@ -133,6 +136,7 @@ pub fn batch_pull_repo() {} Debug, Clone, PartialEq, Serialize, Deserialize, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(BatchExecutionResponse)] #[error(mogh_error::Error)] @@ -179,6 +183,7 @@ pub fn build_repo() {} Serialize, Deserialize, Debug, Clone, PartialEq, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(Update)] #[error(mogh_error::Error)] @@ -207,6 +212,7 @@ pub fn batch_build_repo() {} Debug, Clone, PartialEq, Serialize, Deserialize, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(BatchExecutionResponse)] #[error(mogh_error::Error)] @@ -246,6 +252,7 @@ pub fn cancel_repo_build() {} Serialize, Deserialize, Debug, Clone, PartialEq, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(Update)] #[error(mogh_error::Error)] diff --git a/client/core/rs/src/api/execute/server.rs b/client/core/rs/src/api/execute/server.rs index 8e5bb8d05..c3c97794f 100644 --- a/client/core/rs/src/api/execute/server.rs +++ b/client/core/rs/src/api/execute/server.rs @@ -31,6 +31,7 @@ pub fn start_container() {} Serialize, Deserialize, Debug, Clone, PartialEq, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(Update)] #[error(mogh_error::Error)] @@ -63,6 +64,7 @@ pub fn restart_container() {} Serialize, Deserialize, Debug, Clone, PartialEq, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(Update)] #[error(mogh_error::Error)] @@ -95,6 +97,7 @@ pub fn pause_container() {} Serialize, Deserialize, Debug, Clone, PartialEq, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(Update)] #[error(mogh_error::Error)] @@ -129,6 +132,7 @@ pub fn unpause_container() {} Serialize, Deserialize, Debug, Clone, PartialEq, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(Update)] #[error(mogh_error::Error)] @@ -161,6 +165,7 @@ pub fn stop_container() {} Serialize, Deserialize, Debug, Clone, PartialEq, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(Update)] #[error(mogh_error::Error)] @@ -198,6 +203,7 @@ pub fn destroy_container() {} Serialize, Deserialize, Debug, Clone, PartialEq, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(Update)] #[error(mogh_error::Error)] @@ -232,6 +238,7 @@ pub fn start_all_containers() {} Serialize, Deserialize, Debug, Clone, PartialEq, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(Update)] #[error(mogh_error::Error)] @@ -260,6 +267,7 @@ pub fn restart_all_containers() {} Serialize, Deserialize, Debug, Clone, PartialEq, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(Update)] #[error(mogh_error::Error)] @@ -288,6 +296,7 @@ pub fn pause_all_containers() {} Serialize, Deserialize, Debug, Clone, PartialEq, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(Update)] #[error(mogh_error::Error)] @@ -316,6 +325,7 @@ pub fn unpause_all_containers() {} Serialize, Deserialize, Debug, Clone, PartialEq, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(Update)] #[error(mogh_error::Error)] @@ -344,6 +354,7 @@ pub fn stop_all_containers() {} Serialize, Deserialize, Debug, Clone, PartialEq, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(Update)] #[error(mogh_error::Error)] @@ -374,6 +385,7 @@ pub fn prune_containers() {} Serialize, Deserialize, Debug, Clone, PartialEq, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(Update)] #[error(mogh_error::Error)] @@ -405,6 +417,7 @@ pub fn delete_network() {} Serialize, Deserialize, Debug, Clone, PartialEq, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(Update)] #[error(mogh_error::Error)] @@ -437,6 +450,7 @@ pub fn prune_networks() {} Serialize, Deserialize, Debug, Clone, PartialEq, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(Update)] #[error(mogh_error::Error)] @@ -466,6 +480,7 @@ pub fn delete_image() {} Serialize, Deserialize, Debug, Clone, PartialEq, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(Update)] #[error(mogh_error::Error)] @@ -498,6 +513,7 @@ pub fn prune_images() {} Serialize, Deserialize, Debug, Clone, PartialEq, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(Update)] #[error(mogh_error::Error)] @@ -527,6 +543,7 @@ pub fn delete_volume() {} Serialize, Deserialize, Debug, Clone, PartialEq, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(Update)] #[error(mogh_error::Error)] @@ -559,6 +576,7 @@ pub fn prune_volumes() {} Serialize, Deserialize, Debug, Clone, PartialEq, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(Update)] #[error(mogh_error::Error)] @@ -589,6 +607,7 @@ pub fn prune_docker_builders() {} Serialize, Deserialize, Debug, Clone, PartialEq, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(Update)] #[error(mogh_error::Error)] @@ -619,6 +638,7 @@ pub fn prune_buildx() {} Serialize, Deserialize, Debug, Clone, PartialEq, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(Update)] #[error(mogh_error::Error)] @@ -649,6 +669,7 @@ pub fn prune_system() {} Serialize, Deserialize, Debug, Clone, PartialEq, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(Update)] #[error(mogh_error::Error)] diff --git a/client/core/rs/src/api/execute/stack.rs b/client/core/rs/src/api/execute/stack.rs index b3a55f12f..a3fbc6da4 100644 --- a/client/core/rs/src/api/execute/stack.rs +++ b/client/core/rs/src/api/execute/stack.rs @@ -27,6 +27,7 @@ pub fn deploy_stack() {} Debug, Clone, PartialEq, Serialize, Deserialize, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(Update)] #[error(mogh_error::Error)] @@ -64,6 +65,7 @@ pub fn batch_deploy_stack() {} Serialize, Deserialize, Debug, Clone, PartialEq, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(BatchExecutionResponse)] #[error(mogh_error::Error)] @@ -103,6 +105,7 @@ pub fn deploy_stack_if_changed() {} Debug, Clone, PartialEq, Serialize, Deserialize, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(Update)] #[error(mogh_error::Error)] @@ -134,6 +137,7 @@ pub fn batch_deploy_stack_if_changed() {} Serialize, Deserialize, Debug, Clone, PartialEq, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(BatchExecutionResponse)] #[error(mogh_error::Error)] @@ -171,6 +175,7 @@ pub fn pull_stack() {} Debug, Clone, PartialEq, Serialize, Deserialize, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(Update)] #[error(mogh_error::Error)] @@ -203,6 +208,7 @@ pub fn batch_pull_stack() {} Serialize, Deserialize, Debug, Clone, PartialEq, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(BatchExecutionResponse)] #[error(mogh_error::Error)] @@ -240,6 +246,7 @@ pub fn start_stack() {} Debug, Clone, PartialEq, Serialize, Deserialize, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(Update)] #[error(mogh_error::Error)] @@ -272,6 +279,7 @@ pub fn restart_stack() {} Debug, Clone, PartialEq, Serialize, Deserialize, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(Update)] #[error(mogh_error::Error)] @@ -304,6 +312,7 @@ pub fn pause_stack() {} Debug, Clone, PartialEq, Serialize, Deserialize, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(Update)] #[error(mogh_error::Error)] @@ -338,6 +347,7 @@ pub fn unpause_stack() {} Debug, Clone, PartialEq, Serialize, Deserialize, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(Update)] #[error(mogh_error::Error)] @@ -370,6 +380,7 @@ pub fn stop_stack() {} Debug, Clone, PartialEq, Serialize, Deserialize, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(Update)] #[error(mogh_error::Error)] @@ -404,6 +415,7 @@ pub fn destroy_stack() {} Debug, Clone, PartialEq, Serialize, Deserialize, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(Update)] #[error(mogh_error::Error)] @@ -441,6 +453,7 @@ pub fn run_stack_service() {} Debug, Clone, PartialEq, Serialize, Deserialize, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(Update)] #[error(mogh_error::Error)] @@ -505,6 +518,7 @@ pub fn batch_destroy_stack() {} Serialize, Deserialize, Debug, Clone, PartialEq, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(BatchExecutionResponse)] #[error(mogh_error::Error)] diff --git a/client/core/rs/src/api/execute/swarm.rs b/client/core/rs/src/api/execute/swarm.rs index fe74d81b0..41880f59c 100644 --- a/client/core/rs/src/api/execute/swarm.rs +++ b/client/core/rs/src/api/execute/swarm.rs @@ -35,6 +35,7 @@ pub fn remove_swarm_nodes() {} Serialize, Deserialize, Debug, Clone, PartialEq, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(Update)] #[error(mogh_error::Error)] @@ -69,6 +70,7 @@ pub fn update_swarm_node() {} Serialize, Deserialize, Debug, Clone, PartialEq, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(Update)] #[error(mogh_error::Error)] @@ -115,6 +117,7 @@ pub fn remove_swarm_stacks() {} Serialize, Deserialize, Debug, Clone, PartialEq, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(Update)] #[error(mogh_error::Error)] @@ -157,6 +160,7 @@ pub fn remove_swarm_services() {} Serialize, Deserialize, Debug, Clone, PartialEq, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(Update)] #[error(mogh_error::Error)] @@ -191,6 +195,7 @@ pub fn create_swarm_config() {} Serialize, Deserialize, Debug, Clone, PartialEq, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(Update)] #[error(mogh_error::Error)] @@ -240,6 +245,7 @@ pub fn rotate_swarm_config() {} Serialize, Deserialize, Debug, Clone, PartialEq, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(Update)] #[error(mogh_error::Error)] @@ -274,6 +280,7 @@ pub fn remove_swarm_configs() {} Serialize, Deserialize, Debug, Clone, PartialEq, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(Update)] #[error(mogh_error::Error)] @@ -308,6 +315,7 @@ pub fn create_swarm_secret() {} Serialize, Deserialize, Debug, Clone, PartialEq, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(Update)] #[error(mogh_error::Error)] @@ -359,6 +367,7 @@ pub fn rotate_swarm_secret() {} Serialize, Deserialize, Debug, Clone, PartialEq, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(Update)] #[error(mogh_error::Error)] @@ -393,6 +402,7 @@ pub fn remove_swarm_secrets() {} Serialize, Deserialize, Debug, Clone, PartialEq, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(Update)] #[error(mogh_error::Error)] diff --git a/client/core/rs/src/api/execute/sync.rs b/client/core/rs/src/api/execute/sync.rs index 566645b16..ef55baa37 100644 --- a/client/core/rs/src/api/execute/sync.rs +++ b/client/core/rs/src/api/execute/sync.rs @@ -27,6 +27,7 @@ pub fn run_sync() {} Debug, Clone, PartialEq, Serialize, Deserialize, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoExecuteRequest)] #[response(Update)] #[error(mogh_error::Error)] diff --git a/client/core/rs/src/api/write/sync.rs b/client/core/rs/src/api/write/sync.rs index 57cb5b988..3ec0e27d0 100644 --- a/client/core/rs/src/api/write/sync.rs +++ b/client/core/rs/src/api/write/sync.rs @@ -242,6 +242,7 @@ pub fn commit_sync() {} Debug, Clone, PartialEq, Serialize, Deserialize, Resolve, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[empty_traits(KomodoWriteRequest)] #[response(Update)] #[error(mogh_error::Error)] diff --git a/client/core/rs/src/entities/action.rs b/client/core/rs/src/entities/action.rs index cc03dbd6b..92ce10bc6 100644 --- a/client/core/rs/src/entities/action.rs +++ b/client/core/rs/src/entities/action.rs @@ -81,6 +81,10 @@ pub type _PartialActionConfig = PartialActionConfig; #[derive(Serialize, Deserialize, Debug, Clone, Builder, Partial)] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] #[partial_derive(Serialize, Deserialize, Debug, Clone, Default)] +#[cfg_attr( + feature = "schemars", + partial_derive(schemars::JsonSchema) +)] #[diff_derive(Serialize, Deserialize, Debug, Clone, Default)] #[partial(skip_serializing_none, from, diff)] pub struct ActionConfig { diff --git a/client/core/rs/src/entities/alert.rs b/client/core/rs/src/entities/alert.rs index 41632b820..fc4d80af0 100644 --- a/client/core/rs/src/entities/alert.rs +++ b/client/core/rs/src/entities/alert.rs @@ -74,6 +74,10 @@ pub struct Alert { utoipa::ToSchema )) )] +#[cfg_attr( + feature = "schemars", + strum_discriminants(derive(schemars::JsonSchema)) +)] #[serde(tag = "type", content = "data")] pub enum AlertData { /// A null alert @@ -382,6 +386,7 @@ impl Default for AlertDataVariant { EnumString, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[serde(rename_all = "UPPERCASE")] #[strum(serialize_all = "UPPERCASE")] pub enum SeverityLevel { diff --git a/client/core/rs/src/entities/alerter.rs b/client/core/rs/src/entities/alerter.rs index 9f8b9f9f7..7a4d9c2d6 100644 --- a/client/core/rs/src/entities/alerter.rs +++ b/client/core/rs/src/entities/alerter.rs @@ -45,6 +45,10 @@ pub type _PartialAlerterConfig = PartialAlerterConfig; #[derive(Serialize, Deserialize, Debug, Clone, Builder, Partial)] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] #[partial_derive(Serialize, Deserialize, Debug, Clone, Default)] +#[cfg_attr( + feature = "schemars", + partial_derive(schemars::JsonSchema) +)] #[diff_derive(Serialize, Deserialize, Debug, Clone, Default)] #[partial(skip_serializing_none, from, diff)] pub struct AlerterConfig { @@ -149,6 +153,7 @@ impl utoipa::ToSchema for PartialAlerterConfig {} utoipa::ToSchema )) )] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[serde(tag = "type", content = "params")] pub enum AlerterEndpoint { /// Send alert serialized to JSON to an http endpoint. @@ -179,6 +184,7 @@ impl Default for AlerterEndpoint { Debug, Clone, PartialEq, Serialize, Deserialize, Builder, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] pub struct CustomAlerterEndpoint { /// The http/s endpoint to send the POST to #[serde(default = "default_custom_url")] @@ -204,6 +210,7 @@ fn default_custom_url() -> String { Debug, Clone, PartialEq, Serialize, Deserialize, Builder, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] pub struct SlackAlerterEndpoint { /// The Slack app webhook url #[serde(default = "default_slack_url")] @@ -231,6 +238,7 @@ fn default_slack_url() -> String { Debug, Clone, PartialEq, Serialize, Deserialize, Builder, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] pub struct DiscordAlerterEndpoint { /// The Discord webhook url #[serde(default = "default_discord_url")] @@ -258,6 +266,7 @@ fn default_discord_url() -> String { Debug, Clone, PartialEq, Serialize, Deserialize, Builder, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] pub struct NtfyAlerterEndpoint { /// The ntfy topic URL #[serde(default = "default_ntfy_url")] @@ -288,6 +297,7 @@ fn default_ntfy_url() -> String { Debug, Clone, PartialEq, Serialize, Deserialize, Builder, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] pub struct PushoverAlerterEndpoint { /// The pushover URL including application and user tokens in parameters. #[serde(default = "default_pushover_url")] diff --git a/client/core/rs/src/entities/build.rs b/client/core/rs/src/entities/build.rs index b5b3c3771..248d3591c 100644 --- a/client/core/rs/src/entities/build.rs +++ b/client/core/rs/src/entities/build.rs @@ -260,12 +260,20 @@ pub type _PartialBuildConfig = PartialBuildConfig; #[derive(Debug, Clone, Serialize, Deserialize, Builder, Partial)] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] #[partial_derive(Debug, Clone, Default, Serialize, Deserialize)] +#[cfg_attr( + feature = "schemars", + partial_derive(schemars::JsonSchema) +)] #[diff_derive(Debug, Clone, Default, Serialize, Deserialize)] #[partial(skip_serializing_none, from, diff)] pub struct BuildConfig { /// Which builder is used to build the image. #[serde(default, alias = "builder")] #[partial_attr(serde(alias = "builder"))] + #[cfg_attr( + feature = "schemars", + partial_attr(schemars(rename = "builder")) + )] #[builder(default)] pub builder_id: String, @@ -577,6 +585,7 @@ impl utoipa::ToSchema for PartialBuildConfig {} Debug, Clone, Default, PartialEq, Serialize, Deserialize, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] pub struct ImageRegistryConfig { /// Specify the registry provider domain, eg `docker.io`. /// If not provided, will not push to any registry. diff --git a/client/core/rs/src/entities/builder.rs b/client/core/rs/src/entities/builder.rs index f3812585f..46e0f235c 100644 --- a/client/core/rs/src/entities/builder.rs +++ b/client/core/rs/src/entities/builder.rs @@ -125,6 +125,7 @@ impl Default for BuilderConfig { utoipa::ToSchema )) )] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[serde(tag = "type", content = "params")] #[allow(clippy::large_enum_variant)] pub enum PartialBuilderConfig { @@ -370,13 +371,10 @@ pub type _PartialUrlBuilderConfig = PartialUrlBuilderConfig; #[typeshare] #[derive(Serialize, Deserialize, Debug, Clone, Builder, Partial)] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[partial_derive(Serialize, Deserialize, Debug, Clone, Default)] #[cfg_attr( - not(feature = "utoipa"), - partial_derive(Serialize, Deserialize, Debug, Clone, Default) -)] -#[cfg_attr( - feature = "utoipa", - partial_derive(Serialize, Deserialize, Debug, Clone, Default,) + feature = "schemars", + partial_derive(schemars::JsonSchema) )] #[diff_derive(Serialize, Deserialize, Debug, Clone, Default)] #[partial(skip_serializing_none, from, diff)] @@ -451,12 +449,20 @@ pub type _PartialServerBuilderConfig = PartialServerBuilderConfig; )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] #[partial_derive(Serialize, Deserialize, Debug, Clone, Default)] +#[cfg_attr( + feature = "schemars", + partial_derive(schemars::JsonSchema) +)] #[diff_derive(Serialize, Deserialize, Debug, Clone, Default)] #[partial(skip_serializing_none, from, diff)] pub struct ServerBuilderConfig { /// The server id of the builder #[serde(default, alias = "server")] #[partial_attr(serde(alias = "server"))] + #[cfg_attr( + feature = "schemars", + partial_attr(schemars(rename = "server")) + )] pub server_id: String, } @@ -485,6 +491,10 @@ pub type _PartialAwsBuilderConfig = PartialAwsBuilderConfig; #[derive(Debug, Clone, Serialize, Deserialize, Builder, Partial)] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] #[partial_derive(Serialize, Deserialize, Debug, Clone, Default)] +#[cfg_attr( + feature = "schemars", + partial_derive(schemars::JsonSchema) +)] #[diff_derive(Serialize, Deserialize, Debug, Clone, Default)] #[partial(skip_serializing_none, from, diff)] pub struct AwsBuilderConfig { diff --git a/client/core/rs/src/entities/config/mod.rs b/client/core/rs/src/entities/config/mod.rs index 1e568442e..6ec7babed 100644 --- a/client/core/rs/src/entities/config/mod.rs +++ b/client/core/rs/src/entities/config/mod.rs @@ -119,6 +119,7 @@ impl DatabaseConfig { Deserialize, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] pub struct GitProvider { /// The git provider domain. Default: `github.com`. #[serde(default = "default_git_provider")] @@ -152,6 +153,7 @@ fn default_git_https() -> bool { Deserialize, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] pub struct DockerRegistry { /// The docker provider domain. Default: `docker.io`. #[serde(default = "default_docker_provider")] @@ -182,6 +184,7 @@ fn default_docker_provider() -> String { Deserialize, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] pub struct ProviderAccount { /// The account username. Required. #[serde(alias = "account")] diff --git a/client/core/rs/src/entities/deployment.rs b/client/core/rs/src/entities/deployment.rs index 9e3dc69f5..ebe09d02a 100644 --- a/client/core/rs/src/entities/deployment.rs +++ b/client/core/rs/src/entities/deployment.rs @@ -80,6 +80,10 @@ pub type _PartialDeploymentConfig = PartialDeploymentConfig; #[derive(Serialize, Deserialize, Debug, Clone, Builder, Partial)] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] #[partial_derive(Serialize, Deserialize, Debug, Clone, Default)] +#[cfg_attr( + feature = "schemars", + partial_derive(schemars::JsonSchema) +)] #[diff_derive(Serialize, Deserialize, Debug, Clone, Default)] #[partial(skip_serializing_none, from, diff)] pub struct DeploymentConfig { @@ -89,6 +93,10 @@ pub struct DeploymentConfig { /// swarm_id overrides server_id and the Deployment will be in Swarm mode. #[serde(default, alias = "swarm")] #[partial_attr(serde(alias = "swarm"))] + #[cfg_attr( + feature = "schemars", + partial_attr(schemars(rename = "swarm")) + )] #[builder(default)] pub swarm_id: String, @@ -98,6 +106,10 @@ pub struct DeploymentConfig { /// swarm_id overrides server_id and the Deployment will be in Swarm mode. #[serde(default, alias = "server")] #[partial_attr(serde(alias = "server"))] + #[cfg_attr( + feature = "schemars", + partial_attr(schemars(rename = "server")) + )] #[builder(default)] pub server_id: String, @@ -355,6 +367,7 @@ impl utoipa::ToSchema for PartialDeploymentConfig {} utoipa::ToSchema )) )] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[serde(tag = "type", content = "params")] pub enum DeploymentImage { /// Deploy any external image. @@ -368,6 +381,7 @@ pub enum DeploymentImage { Build { /// The id of the Build #[serde(default, alias = "build")] + #[cfg_attr(feature = "schemars", schemars(rename = "build"))] build_id: String, /// Use a custom / older version of the image produced by the build. /// if version is 0.0.0, this means `latest` image. @@ -500,6 +514,7 @@ impl From for DeploymentState { AsRefStr, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] pub enum RestartMode { #[default] #[serde(rename = "no")] diff --git a/client/core/rs/src/entities/docker/node.rs b/client/core/rs/src/entities/docker/node.rs index 040eaceda..2b5d8bf09 100644 --- a/client/core/rs/src/entities/docker/node.rs +++ b/client/core/rs/src/entities/docker/node.rs @@ -129,6 +129,7 @@ pub struct NodeSpec { ValueEnum, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] pub enum NodeSpecRoleEnum { #[default] #[serde(rename = "")] @@ -155,6 +156,7 @@ pub enum NodeSpecRoleEnum { ValueEnum, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] pub enum NodeSpecAvailabilityEnum { #[default] #[serde(rename = "")] diff --git a/client/core/rs/src/entities/mod.rs b/client/core/rs/src/entities/mod.rs index 3b569532a..b7884eb15 100644 --- a/client/core/rs/src/entities/mod.rs +++ b/client/core/rs/src/entities/mod.rs @@ -103,6 +103,7 @@ pub type _Serror = Serror; Debug, Clone, Default, PartialEq, Serialize, Deserialize, Parser, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] pub struct NoData {} pub trait MergePartial: Sized { @@ -210,6 +211,7 @@ pub struct __Serror { Serialize, Deserialize, Debug, Clone, Default, PartialEq, Eq, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] pub struct SystemCommand { #[serde(default)] pub path: String, @@ -238,6 +240,7 @@ impl SystemCommand { #[typeshare] #[derive(Serialize, Debug, Clone, Copy, Default, PartialEq)] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] pub struct Version { pub major: i32, pub minor: i32, @@ -488,6 +491,7 @@ impl ImageDigest { #[typeshare] #[derive(Serialize, Deserialize, Debug, Clone, PartialEq)] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] pub struct MaintenanceWindow { /// Name for the maintenance window (required) pub name: String, @@ -920,6 +924,7 @@ pub enum DayOfWeek { Deserialize, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] pub enum MaintenanceScheduleType { /// Daily at the specified time #[default] @@ -1364,6 +1369,7 @@ pub enum SearchCombinator { EnumString, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[serde(rename_all = "UPPERCASE")] #[strum(serialize_all = "UPPERCASE")] pub enum TerminationSignal { @@ -1421,6 +1427,11 @@ pub enum TerminationSignal { utoipa::ToSchema, )) )] +#[cfg_attr( + feature = "schemars", + strum_discriminants(derive(schemars::JsonSchema)) +)] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[serde(tag = "type", content = "id")] pub enum ResourceTarget { System(String), @@ -1577,6 +1588,7 @@ impl ResourceTargetVariant { Debug, Clone, Copy, PartialEq, Eq, Default, Serialize, Deserialize, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] pub enum ScheduleFormat { #[default] English, @@ -1588,6 +1600,7 @@ pub enum ScheduleFormat { Debug, Clone, Copy, PartialEq, Eq, Default, Serialize, Deserialize, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[serde(rename_all = "snake_case")] pub enum FileFormat { #[default] diff --git a/client/core/rs/src/entities/permission.rs b/client/core/rs/src/entities/permission.rs index 9143cf5d5..18d295291 100644 --- a/client/core/rs/src/entities/permission.rs +++ b/client/core/rs/src/entities/permission.rs @@ -118,6 +118,7 @@ impl UserTarget { Default, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] pub enum PermissionLevel { /// No permissions. #[default] @@ -156,6 +157,7 @@ impl Default for &PermissionLevel { Ord, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] pub enum SpecificPermission { /// On **Server** /// - Access the terminal apis @@ -193,6 +195,7 @@ impl SpecificPermission { #[typeshare] #[derive(Debug, Clone, Default)] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] pub struct PermissionLevelAndSpecifics { pub level: PermissionLevel, #[cfg_attr(feature = "utoipa", schema(value_type = Vec))] diff --git a/client/core/rs/src/entities/procedure.rs b/client/core/rs/src/entities/procedure.rs index a61a6871a..fdb6b89cc 100644 --- a/client/core/rs/src/entities/procedure.rs +++ b/client/core/rs/src/entities/procedure.rs @@ -82,12 +82,20 @@ pub type _PartialProcedureConfig = PartialProcedureConfig; #[derive(Debug, Clone, Serialize, Deserialize, Partial, Builder)] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] #[partial_derive(Debug, Clone, Default, Serialize, Deserialize)] +#[cfg_attr( + feature = "schemars", + partial_derive(schemars::JsonSchema) +)] #[diff_derive(Debug, Clone, Default, Serialize, Deserialize)] #[partial(skip_serializing_none, from, diff)] pub struct ProcedureConfig { /// The stages to be run by the procedure. #[serde(default, alias = "stage")] #[partial_attr(serde(alias = "stage"))] + #[cfg_attr( + feature = "schemars", + partial_attr(schemars(rename = "stage")) + )] #[builder(default)] pub stages: Vec, @@ -207,6 +215,7 @@ impl utoipa::ToSchema for PartialProcedureConfig {} #[typeshare] #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] pub struct ProcedureStage { /// A name for the procedure pub name: String, @@ -215,6 +224,7 @@ pub struct ProcedureStage { pub enabled: bool, /// The executions in the stage #[serde(default, alias = "execution")] + #[cfg_attr(feature = "schemars", schemars(rename = "execution"))] pub executions: Vec, } @@ -222,6 +232,7 @@ pub struct ProcedureStage { #[typeshare] #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] pub struct EnabledExecution { /// The execution request to run. pub execution: Execution, diff --git a/client/core/rs/src/entities/repo.rs b/client/core/rs/src/entities/repo.rs index 3b86c3585..3c48af447 100644 --- a/client/core/rs/src/entities/repo.rs +++ b/client/core/rs/src/entities/repo.rs @@ -113,18 +113,30 @@ pub type _PartialRepoConfig = PartialRepoConfig; #[derive(Serialize, Deserialize, Debug, Clone, Builder, Partial)] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] #[partial_derive(Serialize, Deserialize, Debug, Clone, Default)] +#[cfg_attr( + feature = "schemars", + partial_derive(schemars::JsonSchema) +)] #[diff_derive(Serialize, Deserialize, Debug, Clone, Default)] #[partial(skip_serializing_none, from, diff)] pub struct RepoConfig { /// The server to clone the repo on. #[serde(default, alias = "server")] #[partial_attr(serde(alias = "server"))] + #[cfg_attr( + feature = "schemars", + partial_attr(schemars(rename = "server")) + )] #[builder(default)] pub server_id: String, /// Attach a builder to 'build' the repo. #[serde(default, alias = "builder")] #[partial_attr(serde(alias = "builder"))] + #[cfg_attr( + feature = "schemars", + partial_attr(schemars(rename = "builder")) + )] #[builder(default)] pub builder_id: String, diff --git a/client/core/rs/src/entities/server.rs b/client/core/rs/src/entities/server.rs index c80328cd1..823f1846e 100644 --- a/client/core/rs/src/entities/server.rs +++ b/client/core/rs/src/entities/server.rs @@ -96,6 +96,10 @@ pub type _PartialServerConfig = PartialServerConfig; #[derive(Serialize, Deserialize, Debug, Clone, Builder, Partial)] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] #[partial_derive(Serialize, Deserialize, Debug, Clone, Default)] +#[cfg_attr( + feature = "schemars", + partial_derive(schemars::JsonSchema) +)] #[diff_derive(Serialize, Deserialize, Debug, Clone, Default)] #[partial(skip_serializing_none, from, diff)] pub struct ServerConfig { diff --git a/client/core/rs/src/entities/stack.rs b/client/core/rs/src/entities/stack.rs index 1cff045dd..99867ceae 100644 --- a/client/core/rs/src/entities/stack.rs +++ b/client/core/rs/src/entities/stack.rs @@ -293,6 +293,10 @@ pub type _PartialStackConfig = PartialStackConfig; #[derive(Debug, Clone, Serialize, Deserialize, Builder, Partial)] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] #[partial_derive(Debug, Clone, Default, Serialize, Deserialize)] +#[cfg_attr( + feature = "schemars", + partial_derive(schemars::JsonSchema) +)] #[diff_derive(Debug, Clone, Default, Serialize, Deserialize)] #[partial(skip_serializing_none, from, diff)] pub struct StackConfig { @@ -302,6 +306,10 @@ pub struct StackConfig { /// swarm_id overrides server_id and the Stack will be in Swarm mode. #[serde(default, alias = "swarm")] #[partial_attr(serde(alias = "swarm"))] + #[cfg_attr( + feature = "schemars", + partial_attr(schemars(rename = "swarm")) + )] #[builder(default)] pub swarm_id: String, @@ -311,6 +319,10 @@ pub struct StackConfig { /// swarm_id overrides server_id and the Stack will be in Swarm mode. #[serde(default, alias = "server")] #[partial_attr(serde(alias = "server"))] + #[cfg_attr( + feature = "schemars", + partial_attr(schemars(rename = "server")) + )] #[builder(default)] pub server_id: String, @@ -915,6 +927,7 @@ pub struct StackRemoteFileContents { Deserialize, )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] pub enum StackFileRequires { /// Diff requires service redeploy. #[serde(alias = "redeploy")] @@ -933,6 +946,7 @@ pub enum StackFileRequires { #[typeshare] #[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize)] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] pub struct AdditionalEnvFile { /// File path relative to run directory pub path: String, @@ -1012,6 +1026,7 @@ impl<'de> Deserialize<'de> for AdditionalEnvFile { #[typeshare] #[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize)] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] pub struct StackFileDependency { /// Specify the file pub path: String, diff --git a/client/core/rs/src/entities/swarm.rs b/client/core/rs/src/entities/swarm.rs index aa641d9e7..e16ecbc21 100644 --- a/client/core/rs/src/entities/swarm.rs +++ b/client/core/rs/src/entities/swarm.rs @@ -82,6 +82,10 @@ pub type _PartialSwarmConfig = PartialSwarmConfig; )] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] #[partial_derive(Serialize, Deserialize, Debug, Clone, Default)] +#[cfg_attr( + feature = "schemars", + partial_derive(schemars::JsonSchema) +)] #[diff_derive(Serialize, Deserialize, Debug, Clone, Default)] #[partial(skip_serializing_none, from, diff)] pub struct SwarmConfig { @@ -90,6 +94,10 @@ pub struct SwarmConfig { /// tries the next Server. #[serde(default, alias = "servers")] #[partial_attr(serde(alias = "servers"))] + #[cfg_attr( + feature = "schemars", + partial_attr(schemars(rename = "server")) + )] #[builder(default)] pub server_ids: Vec, diff --git a/client/core/rs/src/entities/sync.rs b/client/core/rs/src/entities/sync.rs index 066510c1d..0c720e047 100644 --- a/client/core/rs/src/entities/sync.rs +++ b/client/core/rs/src/entities/sync.rs @@ -186,6 +186,10 @@ pub type _PartialResourceSyncConfig = PartialResourceSyncConfig; #[derive(Debug, Clone, Serialize, Deserialize, Builder, Partial)] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] #[partial_derive(Debug, Clone, Default, Serialize, Deserialize)] +#[cfg_attr( + feature = "schemars", + partial_derive(schemars::JsonSchema) +)] #[diff_derive(Debug, Clone, Default, Serialize, Deserialize)] #[partial(skip_serializing_none, from, diff)] pub struct ResourceSyncConfig { diff --git a/client/core/rs/src/entities/toml.rs b/client/core/rs/src/entities/toml.rs index d5ebc63d6..0a0df9d9a 100644 --- a/client/core/rs/src/entities/toml.rs +++ b/client/core/rs/src/entities/toml.rs @@ -26,12 +26,15 @@ use super::{ #[typeshare] #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] +#[cfg_attr(feature = "schemars", schemars(rename = "Resources"))] pub struct ResourcesToml { #[serde( default, alias = "swarm", skip_serializing_if = "Vec::is_empty" )] + #[cfg_attr(feature = "schemars", schemars(rename = "swarm"))] pub swarms: Vec>, #[serde( @@ -39,6 +42,7 @@ pub struct ResourcesToml { alias = "server", skip_serializing_if = "Vec::is_empty" )] + #[cfg_attr(feature = "schemars", schemars(rename = "server"))] pub servers: Vec>, #[serde( @@ -46,6 +50,7 @@ pub struct ResourcesToml { alias = "deployment", skip_serializing_if = "Vec::is_empty" )] + #[cfg_attr(feature = "schemars", schemars(rename = "deployment"))] pub deployments: Vec>, #[serde( @@ -53,6 +58,7 @@ pub struct ResourcesToml { alias = "stack", skip_serializing_if = "Vec::is_empty" )] + #[cfg_attr(feature = "schemars", schemars(rename = "stack"))] pub stacks: Vec>, #[serde( @@ -60,6 +66,7 @@ pub struct ResourcesToml { alias = "build", skip_serializing_if = "Vec::is_empty" )] + #[cfg_attr(feature = "schemars", schemars(rename = "build"))] pub builds: Vec>, #[serde( @@ -67,6 +74,7 @@ pub struct ResourcesToml { alias = "repo", skip_serializing_if = "Vec::is_empty" )] + #[cfg_attr(feature = "schemars", schemars(rename = "repo"))] pub repos: Vec>, #[serde( @@ -74,6 +82,7 @@ pub struct ResourcesToml { alias = "procedure", skip_serializing_if = "Vec::is_empty" )] + #[cfg_attr(feature = "schemars", schemars(rename = "procedure"))] pub procedures: Vec>, #[serde( @@ -81,6 +90,7 @@ pub struct ResourcesToml { alias = "action", skip_serializing_if = "Vec::is_empty" )] + #[cfg_attr(feature = "schemars", schemars(rename = "action"))] pub actions: Vec>, #[serde( @@ -88,6 +98,7 @@ pub struct ResourcesToml { alias = "alerter", skip_serializing_if = "Vec::is_empty" )] + #[cfg_attr(feature = "schemars", schemars(rename = "alerter"))] pub alerters: Vec>, #[serde( @@ -95,6 +106,7 @@ pub struct ResourcesToml { alias = "builder", skip_serializing_if = "Vec::is_empty" )] + #[cfg_attr(feature = "schemars", schemars(rename = "builder"))] pub builders: Vec>, #[serde( @@ -102,6 +114,10 @@ pub struct ResourcesToml { alias = "resource_sync", skip_serializing_if = "Vec::is_empty" )] + #[cfg_attr( + feature = "schemars", + schemars(rename = "resource_sync") + )] pub resource_syncs: Vec>, #[serde( @@ -109,6 +125,7 @@ pub struct ResourcesToml { alias = "user_group", skip_serializing_if = "Vec::is_empty" )] + #[cfg_attr(feature = "schemars", schemars(rename = "user_group"))] pub user_groups: Vec, #[serde( @@ -116,12 +133,14 @@ pub struct ResourcesToml { alias = "variable", skip_serializing_if = "Vec::is_empty" )] + #[cfg_attr(feature = "schemars", schemars(rename = "variables"))] pub variables: Vec, } #[typeshare] #[derive(Debug, Clone, Serialize, Deserialize)] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] pub struct ResourceToml { /// The resource name. Required pub name: String, @@ -165,6 +184,7 @@ fn is_false(b: &bool) -> bool { #[typeshare] #[derive(Debug, Clone, Serialize, Deserialize)] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] pub struct UserGroupToml { /// User group name pub name: String, @@ -185,12 +205,14 @@ pub struct UserGroupToml { /// Permissions given to the group #[serde(default, alias = "permission")] + #[cfg_attr(feature = "schemars", schemars(rename = "permission"))] pub permissions: Vec, } #[typeshare] #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] pub struct PermissionToml { /// Id can be: /// - resource name. `id = "abcd-build"` diff --git a/client/core/rs/src/entities/variable.rs b/client/core/rs/src/entities/variable.rs index 56154ff4e..3721974d4 100644 --- a/client/core/rs/src/entities/variable.rs +++ b/client/core/rs/src/entities/variable.rs @@ -6,6 +6,7 @@ use typeshare::typeshare; #[typeshare] #[derive(Serialize, Deserialize, Debug, Clone, Default)] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))] #[cfg_attr( feature = "mongo", derive(mongo_indexed::derive::MongoIndexed) diff --git a/xtask/Cargo.toml b/xtask/Cargo.toml new file mode 100644 index 000000000..2534d698f --- /dev/null +++ b/xtask/Cargo.toml @@ -0,0 +1,15 @@ +[package] +name = "xtask" +version.workspace = true +edition.workspace = true +authors.workspace = true +license.workspace = true +homepage.workspace = true +repository.workspace = true + +[dependencies] +clap = { workspace = true } +anyhow = { workspace = true } + +schemars = { workspace = true } +komodo_client = { workspace = true, features = ["schemars"] } diff --git a/xtask/src/generate/mod.rs b/xtask/src/generate/mod.rs new file mode 100644 index 000000000..31d2a01db --- /dev/null +++ b/xtask/src/generate/mod.rs @@ -0,0 +1,17 @@ +mod resource_json_schema; + +use crate::XTask; +use clap::Subcommand; + +#[derive(Debug, Subcommand)] +pub enum Generate { + ResourceJsonSchema(resource_json_schema::ResourceJsonSchema), +} + +impl XTask for Generate { + fn run(self) -> anyhow::Result<()> { + match self { + Generate::ResourceJsonSchema(cmd) => cmd.run(), + } + } +} diff --git a/xtask/src/generate/resource_json_schema.rs b/xtask/src/generate/resource_json_schema.rs new file mode 100644 index 000000000..908d2f6ef --- /dev/null +++ b/xtask/src/generate/resource_json_schema.rs @@ -0,0 +1,46 @@ +use crate::XTask; +use anyhow::Result; +use clap::Args; +use komodo_client::entities::toml::ResourcesToml; +use schemars::_private::serde_json; +use schemars::schema_for; +use std::fs; +use std::path::PathBuf; + +#[derive(Debug, Args)] +pub struct ResourceJsonSchema { + #[clap(long)] + pretty: bool, + #[clap(flatten)] + output: Output, +} + +#[derive(Debug, Args)] +#[group(required = true, multiple = false)] +struct Output { + #[clap(long)] + stdout: bool, + + #[clap(long)] + file: Option, +} + +impl XTask for ResourceJsonSchema { + fn run(self) -> Result<()> { + let schema = schema_for!(ResourcesToml); + + let schema_data = if self.pretty { + serde_json::to_string_pretty(&schema)? + } else { + serde_json::to_string(&schema)? + }; + + if self.output.stdout { + println!("{schema_data}") + } else if let Some(file) = self.output.file { + fs::write(&file, schema_data)?; + } + + Ok(()) + } +} diff --git a/xtask/src/main.rs b/xtask/src/main.rs new file mode 100644 index 000000000..3146ebcb9 --- /dev/null +++ b/xtask/src/main.rs @@ -0,0 +1,29 @@ +mod generate; + +use anyhow::Result; +use clap::{Parser, Subcommand}; + +#[derive(Debug, Parser)] +#[command(name = "xtask")] +struct Cli { + #[command(subcommand)] + command: Commands, +} + +#[derive(Debug, Subcommand)] +enum Commands { + #[command(subcommand)] + Generate(generate::Generate), +} + +trait XTask { + fn run(self) -> Result<()>; +} + +fn main() -> Result<()> { + let cli = Cli::parse(); + + match cli.command { + Commands::Generate(cmd) => cmd.run(), + } +} From ffbc65f5873cbf780c831486e02073b9aac7a082 Mon Sep 17 00:00:00 2001 From: bytedream Date: Thu, 9 Apr 2026 21:07:43 +0200 Subject: [PATCH 2/2] remove unnecessary renames --- client/core/rs/src/entities/procedure.rs | 1 - client/core/rs/src/entities/swarm.rs | 2 +- client/core/rs/src/entities/toml.rs | 3 +-- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/client/core/rs/src/entities/procedure.rs b/client/core/rs/src/entities/procedure.rs index fdb6b89cc..a534da0da 100644 --- a/client/core/rs/src/entities/procedure.rs +++ b/client/core/rs/src/entities/procedure.rs @@ -224,7 +224,6 @@ pub struct ProcedureStage { pub enabled: bool, /// The executions in the stage #[serde(default, alias = "execution")] - #[cfg_attr(feature = "schemars", schemars(rename = "execution"))] pub executions: Vec, } diff --git a/client/core/rs/src/entities/swarm.rs b/client/core/rs/src/entities/swarm.rs index e16ecbc21..966d64cc0 100644 --- a/client/core/rs/src/entities/swarm.rs +++ b/client/core/rs/src/entities/swarm.rs @@ -96,7 +96,7 @@ pub struct SwarmConfig { #[partial_attr(serde(alias = "servers"))] #[cfg_attr( feature = "schemars", - partial_attr(schemars(rename = "server")) + partial_attr(schemars(rename = "servers")) )] #[builder(default)] pub server_ids: Vec, diff --git a/client/core/rs/src/entities/toml.rs b/client/core/rs/src/entities/toml.rs index 0a0df9d9a..f7614d94a 100644 --- a/client/core/rs/src/entities/toml.rs +++ b/client/core/rs/src/entities/toml.rs @@ -133,7 +133,7 @@ pub struct ResourcesToml { alias = "variable", skip_serializing_if = "Vec::is_empty" )] - #[cfg_attr(feature = "schemars", schemars(rename = "variables"))] + #[cfg_attr(feature = "schemars", schemars(rename = "variable"))] pub variables: Vec, } @@ -205,7 +205,6 @@ pub struct UserGroupToml { /// Permissions given to the group #[serde(default, alias = "permission")] - #[cfg_attr(feature = "schemars", schemars(rename = "permission"))] pub permissions: Vec, }