use serde::{Deserialize, Serialize};
use crate::is_false;
#[derive(Debug, Clone, Default, Serialize, Deserialize, Eq)]
#[must_use]
#[non_exhaustive]
pub struct EnumDefinition {
pub name: String,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub variants: Vec<EnumVariant>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(default, skip_serializing_if = "is_false")]
pub imported: bool,
}
impl EnumDefinition {
pub fn new<T: Into<String>>(name: T, variants: Vec<EnumVariant>, description: Option<String>) -> Self {
Self {
name: name.into(),
variants,
imported: false,
description,
}
}
}
impl PartialEq for EnumDefinition {
fn eq(&self, other: &Self) -> bool {
self.name == other.name && self.variants == other.variants
}
}
#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq, Eq)]
#[must_use]
#[non_exhaustive]
pub struct EnumVariant {
pub name: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub index: Option<u32>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub value: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
}
impl EnumVariant {
pub fn new<T: Into<String>>(name: T, index: Option<u32>, value: Option<String>, description: Option<String>) -> Self {
Self {
name: name.into(),
index,
value,
description,
}
}
}