pub enum DataType {
Struct {
name: String,
fields: Vec<StructField>,
},
Enum { name: String, items: Vec<String> },
Alias {
alias: String,
info: StructField,
},
}
impl DataType {
pub fn schema_name(&self) -> &str {
match self {
DataType::Struct { name, .. } => &name,
DataType::Enum { name, .. } => &name,
DataType::Alias { alias, .. } => &alias,
}
}
pub fn sort_fields(&mut self) {
match self {
DataType::Struct { fields, .. } => {
fields.sort_by(|a, b| a.name.cmp(&b.name));
}
DataType::Enum { items, .. } => items.sort(),
DataType::Alias { .. } => (),
}
}
}
pub struct StructField {
pub name: String,
pub translated_name: String,
pub type_: FieldType,
pub type_format: String,
pub array_dimensions: i32,
pub is_nullable: bool,
pub descr: String,
}
pub enum FieldType {
Plain(String),
OneOf(Vec<String>),
}
impl FieldType {
pub fn to_vec(&self) -> Vec<String> {
match self {
FieldType::Plain(t) => vec![t.clone()],
FieldType::OneOf(items) => items.clone(),
}
}
}