diff --git a/client/rs/src/entities/alerter.rs b/client/rs/src/entities/alerter.rs index b7c1bd3ce..53d7c8c97 100644 --- a/client/rs/src/entities/alerter.rs +++ b/client/rs/src/entities/alerter.rs @@ -1,11 +1,14 @@ use derive_builder::Builder; use derive_variants::EnumVariants; +use mungos::mongodb::bson::{doc, Document}; use partial_derive2::Partial; use serde::{Deserialize, Serialize}; -use strum_macros::{Display, EnumString}; +use strum_macros::{AsRefStr, Display, EnumString}; use typeshare::typeshare; -use super::resource::{Resource, ResourceListItem}; +use super::resource::{ + AddFilters, Resource, ResourceListItem, ResourceQuery, +}; #[typeshare] pub type Alerter = Resource; @@ -27,6 +30,9 @@ pub struct AlerterInfo { pub is_default: bool, } +#[typeshare(serialized_as = "AlerterConfig['type']")] +pub type _AlerterConfigVariant = AlerterConfigVariant; + #[typeshare] #[derive(Serialize, Deserialize, Debug, Clone, EnumVariants)] #[variant_derive( @@ -36,7 +42,8 @@ pub struct AlerterInfo { Clone, Copy, Display, - EnumString + EnumString, + AsRefStr )] #[serde(tag = "type", content = "params")] pub enum AlerterConfig { @@ -59,7 +66,8 @@ pub type _PartialSlackAlerterConfig = PartialSlackAlerterConfig; Clone, Copy, Display, - EnumString + EnumString, + AsRefStr )] #[serde(tag = "type", content = "params")] pub enum PartialAlerterConfig { @@ -129,3 +137,22 @@ pub struct SlackAlerterConfig { ))] pub url: String, } + +#[typeshare] +pub type AlerterQuery = ResourceQuery; + +#[typeshare] +#[derive(Serialize, Deserialize, Debug, Clone, Default)] +pub struct AlerterQuerySpecifics { + pub types: Vec<_AlerterConfigVariant>, +} + +impl AddFilters for AlerterQuerySpecifics { + fn add_filters(&self, filters: &mut Document) { + let types = + self.types.iter().map(|t| t.as_ref()).collect::>(); + if !self.types.is_empty() { + filters.insert("config.type", doc! { "$in": types }); + } + } +} diff --git a/client/rs/src/entities/builder.rs b/client/rs/src/entities/builder.rs index bc9fdef5d..7168b54a9 100644 --- a/client/rs/src/entities/builder.rs +++ b/client/rs/src/entities/builder.rs @@ -5,7 +5,9 @@ use serde::{Deserialize, Serialize}; use strum_macros::{Display, EnumString}; use typeshare::typeshare; -use super::resource::{Resource, ResourceListItem}; +use super::resource::{ + AddFilters, Resource, ResourceListItem, ResourceQuery, +}; #[typeshare] pub type Builder = Resource; @@ -178,3 +180,12 @@ fn aws_default_instance_type() -> String { fn aws_default_volume_gb() -> i32 { 20 } + +#[typeshare] +pub type BuilderQuery = ResourceQuery; + +#[typeshare] +#[derive(Serialize, Deserialize, Debug, Clone, Default)] +pub struct BuilderQuerySpecifics {} + +impl AddFilters for BuilderQuerySpecifics {} diff --git a/client/rs/src/entities/procedure.rs b/client/rs/src/entities/procedure.rs index 8734b1bac..0476695d8 100644 --- a/client/rs/src/entities/procedure.rs +++ b/client/rs/src/entities/procedure.rs @@ -1,10 +1,14 @@ use derive_variants::EnumVariants; +use mungos::mongodb::bson::{doc, Document}; use serde::{Deserialize, Serialize}; +use strum_macros::{AsRefStr, Display, EnumString}; use typeshare::typeshare; use crate::api::execute::Execution; -use super::resource::{Resource, ResourceListItem}; +use super::resource::{ + AddFilters, Resource, ResourceListItem, ResourceQuery, +}; #[typeshare] pub type Procedure = Resource; @@ -15,12 +19,24 @@ pub type ProcedureListItem = ResourceListItem; #[typeshare] #[derive(Serialize, Deserialize, Debug, Clone)] pub struct ProcedureListItemInfo { - pub procedure_type: ProcedureConfigVariant, + pub procedure_type: _ProcedureConfigVariant, } +#[typeshare(serialized_as = "ProcedureConfig['type']")] +pub type _ProcedureConfigVariant = ProcedureConfigVariant; + #[typeshare] #[derive(Serialize, Deserialize, Debug, Clone, EnumVariants)] -#[variant_derive(Serialize, Deserialize, Debug, Clone, Copy)] +#[variant_derive( + Serialize, + Deserialize, + Debug, + Clone, + Copy, + Display, + EnumString, + AsRefStr +)] #[serde(tag = "type", content = "data")] pub enum ProcedureConfig { Execution(Execution), @@ -51,3 +67,22 @@ impl From<&ProcedureConfig> for ProcedureConfigVariant { pub struct ProcedureActionState { pub running: bool, } + +#[typeshare] +pub type ProcedureQuery = ResourceQuery; + +#[typeshare] +#[derive(Serialize, Deserialize, Debug, Clone, Default)] +pub struct ProcedureQuerySpecifics { + pub types: Vec<_ProcedureConfigVariant>, +} + +impl AddFilters for ProcedureQuerySpecifics { + fn add_filters(&self, filters: &mut Document) { + let types = + self.types.iter().map(|t| t.as_ref()).collect::>(); + if !self.types.is_empty() { + filters.insert("config.type", doc! { "$in": types }); + } + } +} diff --git a/client/rs/src/entities/repo.rs b/client/rs/src/entities/repo.rs index fb4eecc7e..94856e890 100644 --- a/client/rs/src/entities/repo.rs +++ b/client/rs/src/entities/repo.rs @@ -1,4 +1,5 @@ use derive_builder::Builder; +use mungos::mongodb::bson::{doc, Document}; use partial_derive2::Partial; use serde::{Deserialize, Serialize}; use typeshare::typeshare; @@ -6,7 +7,7 @@ use typeshare::typeshare; use crate::entities::I64; use super::{ - resource::{Resource, ResourceListItem}, + resource::{AddFilters, Resource, ResourceListItem, ResourceQuery}, SystemCommand, }; @@ -62,3 +63,20 @@ pub struct RepoActionState { pub updating: bool, pub deleting: bool, } + +#[typeshare] +pub type RepoQuery = ResourceQuery; + +#[typeshare] +#[derive(Serialize, Deserialize, Debug, Clone, Default)] +pub struct RepoQuerySpecifics { + pub repos: Vec, +} + +impl AddFilters for RepoQuerySpecifics { + fn add_filters(&self, filters: &mut Document) { + if !self.repos.is_empty() { + filters.insert("config.repo", doc! { "$in": &self.repos }); + } + } +} diff --git a/client/rs/src/entities/server/mod.rs b/client/rs/src/entities/server/mod.rs index cbda5a2bb..5e6de83cf 100644 --- a/client/rs/src/entities/server/mod.rs +++ b/client/rs/src/entities/server/mod.rs @@ -3,7 +3,9 @@ use partial_derive2::Partial; use serde::{Deserialize, Serialize}; use typeshare::typeshare; -use super::resource::{Resource, ResourceListItem, ResourceQuery}; +use super::resource::{ + AddFilters, Resource, ResourceListItem, ResourceQuery, +}; pub mod docker_image; pub mod docker_network; @@ -174,6 +176,6 @@ pub type ServerQuery = ResourceQuery; #[typeshare] #[derive(Serialize, Deserialize, Debug, Clone, Default)] -pub struct ServerQuerySpecifics { - -} +pub struct ServerQuerySpecifics {} + +impl AddFilters for ServerQuerySpecifics {}