use drasi_kubernetes_common::KubernetesSourceConfig;
use drasi_lib::bootstrap::BootstrapProvider;
use drasi_plugin_sdk::prelude::*;
use utoipa::OpenApi;
use crate::config::KubernetesBootstrapConfig;
use crate::provider::KubernetesBootstrapProvider;
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, utoipa::ToSchema)]
#[schema(as = bootstrap::kubernetes::KubernetesBootstrapConfig)]
#[serde(deny_unknown_fields)]
pub struct KubernetesBootstrapConfigDto {}
#[derive(OpenApi)]
#[openapi(components(schemas(KubernetesBootstrapConfigDto)))]
struct KubernetesBootstrapSchemas;
pub struct KubernetesBootstrapDescriptor;
#[async_trait]
impl BootstrapPluginDescriptor for KubernetesBootstrapDescriptor {
fn kind(&self) -> &str {
"kubernetes"
}
fn config_version(&self) -> &str {
"1.0.0"
}
fn config_schema_name(&self) -> &str {
"bootstrap.kubernetes.KubernetesBootstrapConfig"
}
fn config_schema_json(&self) -> String {
let api = KubernetesBootstrapSchemas::openapi();
serde_json::to_string(
&api.components
.as_ref()
.expect("OpenAPI components missing")
.schemas,
)
.expect("Failed to serialize config schema")
}
async fn create_bootstrap_provider(
&self,
config_json: &serde_json::Value,
source_config_json: &serde_json::Value,
) -> anyhow::Result<Box<dyn BootstrapProvider>> {
let _bootstrap_config: KubernetesBootstrapConfig =
serde_json::from_value(config_json.clone())?;
let source_config: KubernetesSourceConfig =
serde_json::from_value(source_config_json.clone())?;
source_config.validate()?;
Ok(Box::new(KubernetesBootstrapProvider::new(source_config)))
}
}