use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Schema {
pub id: String,
pub name: String,
pub description: String,
pub attributes: Vec<AttributeDefinition>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AttributeDefinition {
pub name: String,
#[serde(rename = "type")]
pub data_type: AttributeType,
#[serde(rename = "multiValued")]
pub multi_valued: bool,
pub required: bool,
#[serde(rename = "caseExact")]
pub case_exact: bool,
pub mutability: Mutability,
pub uniqueness: Uniqueness,
#[serde(rename = "canonicalValues", default)]
pub canonical_values: Vec<String>,
#[serde(rename = "subAttributes", default)]
pub sub_attributes: Vec<AttributeDefinition>,
#[serde(default)]
pub returned: Option<String>,
}
impl Default for AttributeDefinition {
fn default() -> Self {
Self {
name: String::new(),
data_type: AttributeType::String,
multi_valued: false,
required: false,
case_exact: false,
mutability: Mutability::ReadWrite,
uniqueness: Uniqueness::None,
canonical_values: Vec::new(),
sub_attributes: Vec::new(),
returned: None,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "camelCase")]
pub enum AttributeType {
String,
Boolean,
Decimal,
Integer,
DateTime,
Binary,
Reference,
Complex,
}
impl Default for AttributeType {
fn default() -> Self {
Self::String
}
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "camelCase")]
pub enum Mutability {
ReadOnly,
ReadWrite,
Immutable,
WriteOnly,
}
impl Default for Mutability {
fn default() -> Self {
Self::ReadWrite
}
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "camelCase")]
pub enum Uniqueness {
None,
Server,
Global,
}
impl Default for Uniqueness {
fn default() -> Self {
Self::None
}
}