From d438fbba49e035a645faf2ada737c5e3e9391ed0 Mon Sep 17 00:00:00 2001 From: mbecker20 Date: Sun, 14 Jan 2024 03:19:12 -0800 Subject: [PATCH] builders for the resource queries --- Cargo.lock | 21 +++++++++++++ Cargo.toml | 2 ++ client/rs/Cargo.toml | 1 + client/rs/src/entities/alerter.rs | 5 ++- client/rs/src/entities/build.rs | 5 ++- client/rs/src/entities/deployment.rs | 5 ++- client/rs/src/entities/procedure.rs | 5 ++- client/rs/src/entities/repo.rs | 5 ++- client/rs/src/entities/resource.rs | 47 ++++------------------------ 9 files changed, 50 insertions(+), 46 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 018e589b9..bcb031a6a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1072,6 +1072,26 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "derive_default_builder" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "901f910d000b4d497a96caa9b442804a75cd808db65fbed0760de83addacb739" +dependencies = [ + "derive_default_builder_derive", +] + +[[package]] +name = "derive_default_builder_derive" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b88a547f730777da7ca3bfa6055c6420a429fa7f149cd767da5827200923413" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + [[package]] name = "derive_empty_traits" version = "0.1.0" @@ -2078,6 +2098,7 @@ dependencies = [ "async_timing_util", "bollard", "derive_builder", + "derive_default_builder", "derive_empty_traits", "derive_variants", "envy", diff --git a/Cargo.toml b/Cargo.toml index 76a47c6f6..9a2d84984 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,6 +10,7 @@ license = "GPL-3.0-or-later" [workspace.dependencies] # local + monitor_macros = { path = "lib/macros" } monitor_client = { path = "client/rs" } monitor_periphery = { path = "bin/periphery" } @@ -19,6 +20,7 @@ logger = { path = "lib/logger" } # mogh run_command = { version = "0.0.6", features = ["async_tokio"] } slack = { version = "0.1.0", package = "slack_client_rs" } +derive_default_builder = "0.1.6" derive_empty_traits = "0.1.0" merge_config_files = "0.1.3" termination_signal = "0.1.3" diff --git a/client/rs/Cargo.toml b/client/rs/Cargo.toml index ee9ca59e3..d0445ef1c 100644 --- a/client/rs/Cargo.toml +++ b/client/rs/Cargo.toml @@ -14,6 +14,7 @@ resolver_api.workspace = true derive_empty_traits.workspace = true partial_derive2.workspace = true derive_variants.workspace = true +derive_default_builder.workspace = true mungos.workspace = true mongo_indexed.workspace = true async_timing_util.workspace = true diff --git a/client/rs/src/entities/alerter.rs b/client/rs/src/entities/alerter.rs index cd88282c3..67db32776 100644 --- a/client/rs/src/entities/alerter.rs +++ b/client/rs/src/entities/alerter.rs @@ -1,4 +1,5 @@ use derive_builder::Builder; +use derive_default_builder::DefaultBuilder; use derive_variants::EnumVariants; use mungos::mongodb::bson::{doc, Document}; use partial_derive2::Partial; @@ -139,7 +140,9 @@ pub struct SlackAlerterConfig { pub type AlerterQuery = ResourceQuery; #[typeshare] -#[derive(Serialize, Deserialize, Debug, Clone, Default)] +#[derive( + Serialize, Deserialize, Debug, Clone, Default, DefaultBuilder, +)] pub struct AlerterQuerySpecifics { pub types: Vec, } diff --git a/client/rs/src/entities/build.rs b/client/rs/src/entities/build.rs index dcd85807b..54d3d8f2d 100644 --- a/client/rs/src/entities/build.rs +++ b/client/rs/src/entities/build.rs @@ -1,4 +1,5 @@ use derive_builder::Builder; +use derive_default_builder::DefaultBuilder; use mungos::mongodb::bson::{doc, Document}; use partial_derive2::Partial; use serde::{Deserialize, Serialize}; @@ -122,7 +123,9 @@ pub struct BuildActionState { pub type BuildQuery = ResourceQuery; #[typeshare] -#[derive(Serialize, Deserialize, Debug, Clone, Default)] +#[derive( + Debug, Clone, Default, Serialize, Deserialize, DefaultBuilder, +)] pub struct BuildQuerySpecifics { #[serde(default)] pub builder_ids: Vec, diff --git a/client/rs/src/entities/deployment.rs b/client/rs/src/entities/deployment.rs index 7c533ff12..03cd3b15d 100644 --- a/client/rs/src/entities/deployment.rs +++ b/client/rs/src/entities/deployment.rs @@ -1,4 +1,5 @@ use derive_builder::Builder; +use derive_default_builder::DefaultBuilder; use derive_variants::EnumVariants; use mungos::mongodb::bson::{doc, Document}; use partial_derive2::Partial; @@ -310,7 +311,9 @@ pub struct DeploymentActionState { pub type DeploymentQuery = ResourceQuery; #[typeshare] -#[derive(Serialize, Deserialize, Debug, Clone, Default)] +#[derive( + Serialize, Deserialize, Debug, Clone, Default, DefaultBuilder, +)] pub struct DeploymentQuerySpecifics { #[serde(default)] pub server_ids: Vec, diff --git a/client/rs/src/entities/procedure.rs b/client/rs/src/entities/procedure.rs index 51e5ee41b..7f629867e 100644 --- a/client/rs/src/entities/procedure.rs +++ b/client/rs/src/entities/procedure.rs @@ -1,3 +1,4 @@ +use derive_default_builder::DefaultBuilder; use derive_variants::EnumVariants; use mungos::mongodb::bson::{doc, Document}; use serde::{Deserialize, Serialize}; @@ -72,7 +73,9 @@ pub struct ProcedureActionState { pub type ProcedureQuery = ResourceQuery; #[typeshare] -#[derive(Serialize, Deserialize, Debug, Clone, Default)] +#[derive( + Serialize, Deserialize, Debug, Clone, Default, DefaultBuilder, +)] pub struct ProcedureQuerySpecifics { pub types: Vec, } diff --git a/client/rs/src/entities/repo.rs b/client/rs/src/entities/repo.rs index 80543f2ac..015ede38f 100644 --- a/client/rs/src/entities/repo.rs +++ b/client/rs/src/entities/repo.rs @@ -1,4 +1,5 @@ use derive_builder::Builder; +use derive_default_builder::DefaultBuilder; use mungos::mongodb::bson::{doc, Document}; use partial_derive2::Partial; use serde::{Deserialize, Serialize}; @@ -71,7 +72,9 @@ pub struct RepoActionState { pub type RepoQuery = ResourceQuery; #[typeshare] -#[derive(Serialize, Deserialize, Debug, Clone, Default)] +#[derive( + Serialize, Deserialize, Debug, Clone, Default, DefaultBuilder, +)] pub struct RepoQuerySpecifics { pub repos: Vec, } diff --git a/client/rs/src/entities/resource.rs b/client/rs/src/entities/resource.rs index b5a3e9eac..42a49bed0 100644 --- a/client/rs/src/entities/resource.rs +++ b/client/rs/src/entities/resource.rs @@ -1,4 +1,5 @@ use derive_builder::Builder; +use derive_default_builder::DefaultBuilder; use mungos::mongodb::bson::{ doc, serde_helpers::hex_string_as_object_id, Document, }; @@ -60,8 +61,10 @@ pub struct ResourceListItem { /// Passing empty Vec is the same as not filtering by that field #[typeshare] -#[derive(Serialize, Deserialize, Debug, Clone, Default)] -pub struct ResourceQuery { +#[derive( + Serialize, Deserialize, Debug, Clone, Default, DefaultBuilder, +)] +pub struct ResourceQuery { #[serde(default)] pub names: Vec, #[serde(default)] @@ -76,7 +79,7 @@ pub trait AddFilters { impl AddFilters for () {} -impl AddFilters for ResourceQuery { +impl AddFilters for ResourceQuery { fn add_filters(&self, filters: &mut Document) { if !self.names.is_empty() { filters.insert("name", doc! { "$in": &self.names }); @@ -87,41 +90,3 @@ impl AddFilters for ResourceQuery { self.specific.add_filters(filters); } } - -#[derive(Default)] -pub struct ResourceQueryBuilder { - pub names: Option>, - pub tags: Option>, - pub specific: Option, -} - -impl ResourceQueryBuilder { - pub fn build(self) -> ResourceQuery { - ResourceQuery { - names: self.names.unwrap_or_default(), - tags: self.tags.unwrap_or_default(), - specific: self.specific.unwrap_or_default(), - } - } - - pub fn names( - mut self, - names: impl Into>, - ) -> ResourceQueryBuilder { - self.names = Some(names.into()); - self - } - - pub fn tags( - mut self, - tags: impl Into>, - ) -> ResourceQueryBuilder { - self.tags = Some(tags.into()); - self - } - - pub fn specific(mut self, specific: T) -> ResourceQueryBuilder { - self.specific = Some(specific); - self - } -}