use std::collections::HashMap;
use serde::{Deserialize, Serialize};
use struct_metadata::Described;
use crate::datastore::service::SubmissionParams;
use crate::types::{NonZeroInteger, ServiceName};
use crate::{ElasticMeta, Readable, types::{ClassificationString, JsonMap, Text}};
use super::service::{AccessMode, ChannelKinds, EnvironmentVariable, FetchMethods, ParamKinds, RegistryType, SignatureDelimiter};
#[derive(Serialize, Deserialize, Described, Default)]
#[metadata_type(ElasticMeta)]
#[serde(default)]
#[metadata(index=false, store=false)]
pub struct DockerConfigDelta {
pub allow_internet_access: Option<bool>,
pub command: Option<Vec<String>>,
pub cpu_cores: Option<f32>,
pub environment: Option<Vec<EnvironmentVariable>>,
pub image: Option<String>,
pub registry_username: Option<String>,
pub registry_password: Option<String>,
pub registry_type: Option<RegistryType>,
pub ports: Option<Vec<String>>,
pub ram_mb: Option<i32>,
pub ram_mb_min: Option<i32>,
pub service_account: Option<String>,
pub labels: Option<Vec<EnvironmentVariable>>,
}
#[derive(Serialize, Deserialize, Described, Default)]
#[metadata_type(ElasticMeta)]
#[serde(default)]
#[metadata(index=false, store=false)]
pub struct UpdateSourceDelta {
pub enabled: Option<bool>,
pub name: Option<String>,
pub password: Option<String>,
pub pattern: Option<String>,
pub private_key: Option<String>,
pub ca_cert: Option<String>,
pub ssl_ignore_errors: Option<bool>,
pub proxy: Option<String>,
pub uri: Option<String>,
pub username: Option<String>,
pub headers: Option<Vec<EnvironmentVariable>>,
pub default_classification: Option<ClassificationString>,
pub use_managed_identity: Option<bool>,
pub git_branch: Option<String>,
pub sync: Option<bool>,
pub fetch_method: Option<FetchMethods>,
pub override_classification: Option<bool>,
pub configuration: Option<HashMap<String, serde_json::Value>>,
pub data: Option<Text>,
#[metadata(mapping="integer")]
pub update_interval: Option<NonZeroInteger>,
pub ignore_cache: Option<bool>,
}
#[derive(Serialize, Deserialize, Described, Default)]
#[serde(default)]
#[metadata_type(ElasticMeta)]
#[metadata(index=false, store=false)]
pub struct PersistentVolumeDelta {
pub mount_path: Option<String>,
pub capacity: Option<String>,
pub storage_class: Option<String>,
pub access_mode: Option<AccessMode>,
}
#[derive(Serialize, Deserialize, Described, Default)]
#[serde(default)]
#[metadata_type(ElasticMeta)]
#[metadata(index=false, store=false)]
pub struct DependencyConfigDelta {
pub container: Option<DockerConfigDelta>,
pub volumes: Option<HashMap<String, PersistentVolumeDelta>>,
pub run_as_core: Option<bool>,
}
#[derive(Serialize, Deserialize, Described, Default)]
#[serde(default)]
#[metadata_type(ElasticMeta)]
#[metadata(index=false, store=false)]
pub struct UpdateConfigDelta {
#[metadata[index=true]]
pub generates_signatures: Option<bool>,
pub sources: Option<Vec<UpdateSourceDelta>>,
pub update_interval_seconds: Option<i32>,
pub wait_for_update: Option<bool>,
pub signature_delimiter: Option<SignatureDelimiter>,
pub custom_delimiter: Option<String>,
pub default_pattern: Option<Text>,
}
#[derive(Serialize, Deserialize, Described, Default)]
#[serde(default)]
#[metadata_type(ElasticMeta)]
#[metadata(index=false, store=false)]
pub struct SubmissionParamsDelta {
pub default: Option<serde_json::Value>,
pub name: Option<String>,
#[serde(rename="type")]
pub _type: Option<ParamKinds>,
pub value: Option<serde_json::Value>,
pub list: Option<serde_json::Value>,
pub hide: Option<bool>,
}
impl From<SubmissionParams> for SubmissionParamsDelta {
fn from(value: SubmissionParams) -> Self {
Self {
default: Some(value.default),
name: Some(value.name),
_type: Some(value.param_type),
value: Some(value.value),
list: Some(serde_json::Value::Array(value.list)),
hide: Some(value.hide),
}
}
}
#[derive(Serialize, Deserialize, Described, Default)]
#[serde(default)]
#[metadata_type(ElasticMeta)]
#[metadata(index=true, store=false)]
pub struct ServiceDelta {
#[metadata(store=true)]
pub accepts: Option<String>,
#[metadata(store=true)]
pub rejects: Option<String>,
pub auto_update: Option<bool>,
#[metadata(store=true)]
pub category: Option<String>,
#[metadata(mapping="keyword")]
pub classification: Option<ClassificationString>,
#[metadata(index=false)]
pub config: Option<JsonMap>,
#[metadata(store=true)]
pub description: Option<Text>,
#[metadata(mapping="keyword")]
pub default_result_classification: Option<ClassificationString>,
#[metadata(store=true)]
pub enabled: Option<bool>,
pub is_external: Option<bool>,
pub licence_count: Option<i32>,
pub max_queue_length: Option<i32>,
pub min_instances: Option<i32>,
pub uses_tags: Option<bool>,
pub uses_tag_scores: Option<bool>,
pub uses_temp_submission_data: Option<bool>,
pub uses_metadata: Option<bool>,
pub monitored_keys: Option<Vec<String>>,
#[metadata(store=true)]
pub name: Option<ServiceName>,
#[metadata(store=true)]
pub version: String,
pub privileged: Option<bool>,
pub disable_cache: Option<bool>,
#[metadata(store=true)]
pub stage: Option<String>,
#[metadata(index=false)]
pub submission_params: Option<Vec<SubmissionParamsDelta>>,
pub timeout: Option<i32>,
pub docker_config: Option<DockerConfigDelta>,
pub dependencies: HashMap<String, DependencyConfigDelta>,
pub update_channel: Option<ChannelKinds>,
pub update_config: Option<UpdateConfigDelta>,
pub recursion_prevention: Option<Vec<String>>,
}
impl Readable for ServiceDelta {
fn set_from_archive(&mut self, _from_archive: bool) {}
}