use std::fmt;
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "lowercase")]
pub enum ComponentSource {
Instance,
#[default]
Explicit,
}
impl fmt::Display for ComponentSource {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::Instance => write!(f, "instance"),
Self::Explicit => write!(f, "explicit"),
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "lowercase")]
pub enum ComponentFilter {
Enabled,
}
impl fmt::Display for ComponentFilter {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::Enabled => write!(f, "enabled"),
}
}
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(deny_unknown_fields)]
pub struct PluginDependency {
pub name: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub marketplace: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub version: Option<String>,
}
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct PluginHooksRef {
#[serde(default)]
pub governance: bool,
#[serde(default)]
pub comms: bool,
#[serde(default, alias = "evaluation")]
pub judge: bool,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub include: Vec<String>,
}
impl PluginHooksRef {
#[must_use]
pub const fn is_empty(&self) -> bool {
!self.governance && self.include.is_empty()
}
}
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub struct PluginComponentRef {
#[serde(default)]
pub source: ComponentSource,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub filter: Option<ComponentFilter>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub include: Vec<String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub exclude: Vec<String>,
}