use serde::{Deserialize, Serialize};
use super::shared::{AuthoritativeDefinitions, CustomProperties, StableId, Tags};
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct TeamMember {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub id: Option<StableId>,
pub username: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub role: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub date_in: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub date_out: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub replaced_by_username: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub tags: Option<Tags>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub custom_properties: Option<CustomProperties>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub authoritative_definitions: Option<AuthoritativeDefinitions>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct Team {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub id: Option<StableId>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub members: Vec<TeamMember>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub tags: Option<Tags>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub custom_properties: Option<CustomProperties>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub authoritative_definitions: Option<AuthoritativeDefinitions>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(untagged)]
pub enum TeamDeclaration {
Team(Team),
LegacyMembers(Vec<TeamMember>),
}
impl TeamDeclaration {
#[must_use]
pub fn members(&self) -> &[TeamMember] {
match self {
Self::Team(team) => &team.members,
Self::LegacyMembers(members) => members,
}
}
}