forked from github-starred/komodo
AddFilters for all resource queries
This commit is contained in:
@@ -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<AlerterConfig, AlerterInfo>;
|
||||
@@ -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<AlerterQuerySpecifics>;
|
||||
|
||||
#[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::<Vec<_>>();
|
||||
if !self.types.is_empty() {
|
||||
filters.insert("config.type", doc! { "$in": types });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<BuilderConfig, ()>;
|
||||
@@ -178,3 +180,12 @@ fn aws_default_instance_type() -> String {
|
||||
fn aws_default_volume_gb() -> i32 {
|
||||
20
|
||||
}
|
||||
|
||||
#[typeshare]
|
||||
pub type BuilderQuery = ResourceQuery<BuilderQuerySpecifics>;
|
||||
|
||||
#[typeshare]
|
||||
#[derive(Serialize, Deserialize, Debug, Clone, Default)]
|
||||
pub struct BuilderQuerySpecifics {}
|
||||
|
||||
impl AddFilters for BuilderQuerySpecifics {}
|
||||
|
||||
@@ -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<ProcedureConfig, ()>;
|
||||
@@ -15,12 +19,24 @@ pub type ProcedureListItem = ResourceListItem<ProcedureListItemInfo>;
|
||||
#[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<ProcedureQuerySpecifics>;
|
||||
|
||||
#[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::<Vec<_>>();
|
||||
if !self.types.is_empty() {
|
||||
filters.insert("config.type", doc! { "$in": types });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<RepoQuerySpecifics>;
|
||||
|
||||
#[typeshare]
|
||||
#[derive(Serialize, Deserialize, Debug, Clone, Default)]
|
||||
pub struct RepoQuerySpecifics {
|
||||
pub repos: Vec<String>,
|
||||
}
|
||||
|
||||
impl AddFilters for RepoQuerySpecifics {
|
||||
fn add_filters(&self, filters: &mut Document) {
|
||||
if !self.repos.is_empty() {
|
||||
filters.insert("config.repo", doc! { "$in": &self.repos });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<ServerQuerySpecifics>;
|
||||
|
||||
#[typeshare]
|
||||
#[derive(Serialize, Deserialize, Debug, Clone, Default)]
|
||||
pub struct ServerQuerySpecifics {
|
||||
|
||||
}
|
||||
pub struct ServerQuerySpecifics {}
|
||||
|
||||
impl AddFilters for ServerQuerySpecifics {}
|
||||
|
||||
Reference in New Issue
Block a user