use serde::{Deserialize, Serialize};
use super::CsvwError;
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct CsvwMetadata {
#[serde(rename = "@id", default)]
pub id: Option<String>,
#[serde(rename = "tableSchema", default)]
pub table_schema: TableSchema,
#[serde(rename = "aboutUrl", default)]
pub about_url: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct TableSchema {
#[serde(default)]
pub columns: Vec<ColumnDef>,
#[serde(rename = "primaryKey", default)]
pub primary_key: Vec<String>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ColumnDef {
pub name: String,
#[serde(rename = "datatype", default)]
pub datatype: Option<String>,
#[serde(rename = "propertyUrl", default)]
pub property_url: Option<String>,
#[serde(rename = "suppressOutput", default)]
pub suppress_output: bool,
#[serde(default)]
pub titles: Option<String>,
}
impl CsvwMetadata {
pub fn from_json(json: &str) -> Result<Self, CsvwError> {
serde_json::from_str(json).map_err(CsvwError::from)
}
pub fn column(&self, name: &str) -> Option<&ColumnDef> {
self.table_schema.columns.iter().find(|c| c.name == name)
}
}