km-to-sql 0.1.1

Helpers and shared logic for KotobaMedia to-sql tools
Documentation
use serde::{Deserialize, Serialize};
use url::Url;

#[derive(Serialize, Deserialize, Debug)]
pub struct TableMetadata {
    pub name: String,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub desc: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub source: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub source_url: Option<Url>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub license: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub license_url: Option<Url>,

    #[serde(skip_serializing_if = "Option::is_none")]
    pub primary_key: Option<String>,
    pub columns: Vec<ColumnMetadata>,
}

#[derive(Serialize, Deserialize, Debug)]
pub struct ColumnMetadata {
    pub name: String,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub desc: Option<String>,
    pub data_type: String,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub foreign_key: Option<ColumnForeignKeyDetails>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub enum_values: Option<Vec<ColumnEnumDetails>>,
}

#[derive(Serialize, Deserialize, Debug)]
pub struct ColumnForeignKeyDetails {
    pub foreign_table: String,
    pub foreign_column: String,
}

#[derive(Serialize, Deserialize, Debug)]
pub struct ColumnEnumDetails {
    pub value: String,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub desc: Option<String>,
}