use serde::{Deserialize, Serialize};
use super::ExtensionMap;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
#[cfg_attr(feature = "jsonschema", derive(schemars::JsonSchema))]
#[serde(rename_all = "camelCase")]
pub struct GovernanceMetadata {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub owner: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub governing_authority: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub publication_status: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub published_at: Option<String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub tags: Vec<String>,
#[serde(default, flatten)]
pub extensions: ExtensionMap,
}
pub const PUBLICATION_STATUSES: &[&str] =
&["draft", "published", "deprecated", "retired", "unpublished"];
pub fn is_known_publication_status(status: &str) -> bool {
PUBLICATION_STATUSES
.iter()
.any(|known| known.eq_ignore_ascii_case(status.trim()))
}