builders for the resource queries

This commit is contained in:
mbecker20
2024-01-14 03:19:12 -08:00
parent d73c71e18b
commit d438fbba49
9 changed files with 50 additions and 46 deletions
Generated
+21
View File
@@ -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",
+2
View File
@@ -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"
+1
View File
@@ -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
+4 -1
View File
@@ -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<AlerterQuerySpecifics>;
#[typeshare]
#[derive(Serialize, Deserialize, Debug, Clone, Default)]
#[derive(
Serialize, Deserialize, Debug, Clone, Default, DefaultBuilder,
)]
pub struct AlerterQuerySpecifics {
pub types: Vec<AlerterConfigVariant>,
}
+4 -1
View File
@@ -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<BuildQuerySpecifics>;
#[typeshare]
#[derive(Serialize, Deserialize, Debug, Clone, Default)]
#[derive(
Debug, Clone, Default, Serialize, Deserialize, DefaultBuilder,
)]
pub struct BuildQuerySpecifics {
#[serde(default)]
pub builder_ids: Vec<String>,
+4 -1
View File
@@ -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<DeploymentQuerySpecifics>;
#[typeshare]
#[derive(Serialize, Deserialize, Debug, Clone, Default)]
#[derive(
Serialize, Deserialize, Debug, Clone, Default, DefaultBuilder,
)]
pub struct DeploymentQuerySpecifics {
#[serde(default)]
pub server_ids: Vec<String>,
+4 -1
View File
@@ -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<ProcedureQuerySpecifics>;
#[typeshare]
#[derive(Serialize, Deserialize, Debug, Clone, Default)]
#[derive(
Serialize, Deserialize, Debug, Clone, Default, DefaultBuilder,
)]
pub struct ProcedureQuerySpecifics {
pub types: Vec<ProcedureConfigVariant>,
}
+4 -1
View File
@@ -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<RepoQuerySpecifics>;
#[typeshare]
#[derive(Serialize, Deserialize, Debug, Clone, Default)]
#[derive(
Serialize, Deserialize, Debug, Clone, Default, DefaultBuilder,
)]
pub struct RepoQuerySpecifics {
pub repos: Vec<String>,
}
+6 -41
View File
@@ -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<Info> {
/// Passing empty Vec is the same as not filtering by that field
#[typeshare]
#[derive(Serialize, Deserialize, Debug, Clone, Default)]
pub struct ResourceQuery<T> {
#[derive(
Serialize, Deserialize, Debug, Clone, Default, DefaultBuilder,
)]
pub struct ResourceQuery<T: Default> {
#[serde(default)]
pub names: Vec<String>,
#[serde(default)]
@@ -76,7 +79,7 @@ pub trait AddFilters {
impl AddFilters for () {}
impl<T: AddFilters> AddFilters for ResourceQuery<T> {
impl<T: AddFilters + Default> AddFilters for ResourceQuery<T> {
fn add_filters(&self, filters: &mut Document) {
if !self.names.is_empty() {
filters.insert("name", doc! { "$in": &self.names });
@@ -87,41 +90,3 @@ impl<T: AddFilters> AddFilters for ResourceQuery<T> {
self.specific.add_filters(filters);
}
}
#[derive(Default)]
pub struct ResourceQueryBuilder<T> {
pub names: Option<Vec<String>>,
pub tags: Option<Vec<String>>,
pub specific: Option<T>,
}
impl<T: Default> ResourceQueryBuilder<T> {
pub fn build(self) -> ResourceQuery<T> {
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<Vec<String>>,
) -> ResourceQueryBuilder<T> {
self.names = Some(names.into());
self
}
pub fn tags(
mut self,
tags: impl Into<Vec<String>>,
) -> ResourceQueryBuilder<T> {
self.tags = Some(tags.into());
self
}
pub fn specific(mut self, specific: T) -> ResourceQueryBuilder<T> {
self.specific = Some(specific);
self
}
}