use indexmap::IndexMap;
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use super::dashboard::DashboardConfig;
use super::export::ExportConfig;
use super::observability::ObservabilityConfig;
use super::resource::ResourceKind;
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, PartialEq, Eq)]
#[serde(deny_unknown_fields)]
pub struct Manifest {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub lightshuttle: Option<Version>,
pub project: Project,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub dashboard: Option<DashboardConfig>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub observability: Option<ObservabilityConfig>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub export: Option<ExportConfig>,
pub resources: IndexMap<String, ResourceKind>,
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize, JsonSchema, PartialEq, Eq)]
pub enum Version {
#[serde(rename = "v0")]
V0,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, PartialEq, Eq)]
#[serde(deny_unknown_fields)]
pub struct Project {
pub name: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub version: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
}