use alloc::collections::BTreeMap;
use serde::{Deserialize, Serialize};
use serde_json::Value;
#[derive(
Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq, Hash, schemars::JsonSchema,
)]
#[serde(rename_all = "camelCase")]
pub struct TaploSchemaExt {
#[serde(skip_serializing_if = "Option::is_none")]
pub hidden: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub links: Option<ExtLinks>,
#[serde(skip_serializing_if = "Option::is_none")]
pub docs: Option<ExtDocs>,
#[serde(skip_serializing_if = "Option::is_none")]
pub init_keys: Option<Vec<String>>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub plugins: Vec<String>,
#[serde(flatten)]
pub extra: BTreeMap<String, Value>,
}
#[derive(
Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq, Hash, schemars::JsonSchema,
)]
#[serde(rename_all = "camelCase")]
pub struct ExtDocs {
#[serde(skip_serializing_if = "Option::is_none")]
pub main: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub const_value: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub default_value: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub enum_values: Option<Vec<Option<String>>>,
}
#[derive(
Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq, Hash, schemars::JsonSchema,
)]
#[serde(rename_all = "camelCase")]
pub struct ExtLinks {
#[serde(skip_serializing_if = "Option::is_none")]
pub key: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub enum_values: Option<Vec<Option<String>>>,
}
#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)]
pub struct TaploInfoSchemaExt {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub authors: Vec<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub version: Option<String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub patterns: Vec<String>,
}