extern crate serde_json;
extern crate serde;
use serde_json::{Value, Map};
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
pub fn tables_def(config: &Value) -> serde_json::Result<HashMap<String, Table>> {
let mut result = HashMap::new();
for (k, v) in tables_iter(config) {
result.insert(k.to_string(), Table::new(v)?);
}
Ok(result)
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Table {
pub key: String,
pub fields: HashMap<String, Field>,
}
#[derive(Debug, Serialize, Deserialize)]
pub enum Field {
Int,
Double,
String,
Datetime,
OneToOne(String, String),
OneToMany(String, String),
ManyToOne(String, String),
}
impl Table {
fn new(json: &Value) -> serde_json::Result<Self> {
Ok(serde_json::from_value(json.clone())?)
}
}
pub fn tables_iter(config: &Value) -> &Map<String, Value> {
match &config["tables"] {
serde_json::Value::Object(map) => &map,
_ => panic!("tables.json的tables内容必须是json对象")
}
}