use serde::{Deserialize, Serialize};
use serde_with::skip_serializing_none;
use crate::{
common::{MetaData, NtRef},
QBCreatable, QBFullUpdatable, QBReadable,
};
#[skip_serializing_none]
#[derive(Clone, Debug, Deserialize, PartialEq, Serialize, Default)]
#[serde(rename_all = "PascalCase", default)]
#[cfg_attr(
feature = "builder",
derive(Builder),
builder(default, build_fn(error = "QBTypeError"), setter(into, strip_option))
)]
pub struct Class {
pub id: Option<String>,
pub sync_token: Option<String>,
#[serde(skip_serializing)]
pub meta_data: Option<MetaData>,
pub name: Option<String>,
pub parent_ref: Option<NtRef>,
pub sub_class: Option<bool>,
pub active: Option<bool>,
pub fully_qualified_name: Option<String>,
}
impl QBCreatable for Class {
fn can_create(&self) -> bool {
self.id.is_none()
&& self.sync_token.is_none()
&& self.meta_data.is_none()
&& self.name.is_some()
&& if let Some(true) = self.sub_class {
self.parent_ref.is_some()
} else {
true
}
}
}
impl QBFullUpdatable for Class {
fn can_full_update(&self) -> bool {
self.can_read()
}
}