km_to_sql/
metadata.rs

1use serde::{Deserialize, Serialize};
2use url::Url;
3
4#[derive(Serialize, Deserialize, Debug)]
5pub struct TableMetadata {
6    pub name: String,
7    #[serde(skip_serializing_if = "Option::is_none")]
8    pub desc: Option<String>,
9    #[serde(skip_serializing_if = "Option::is_none")]
10    pub source: Option<String>,
11    #[serde(skip_serializing_if = "Option::is_none")]
12    pub source_url: Option<Url>,
13    #[serde(skip_serializing_if = "Option::is_none")]
14    pub license: Option<String>,
15    #[serde(skip_serializing_if = "Option::is_none")]
16    pub license_url: Option<Url>,
17
18    #[serde(skip_serializing_if = "Option::is_none")]
19    pub primary_key: Option<String>,
20    pub columns: Vec<ColumnMetadata>,
21}
22
23#[derive(Serialize, Deserialize, Debug)]
24pub struct ColumnMetadata {
25    pub name: String,
26    #[serde(skip_serializing_if = "Option::is_none")]
27    pub desc: Option<String>,
28    pub data_type: String,
29    #[serde(skip_serializing_if = "Option::is_none")]
30    pub foreign_key: Option<ColumnForeignKeyDetails>,
31    #[serde(skip_serializing_if = "Option::is_none")]
32    pub enum_values: Option<Vec<ColumnEnumDetails>>,
33}
34
35#[derive(Serialize, Deserialize, Debug)]
36pub struct ColumnForeignKeyDetails {
37    pub foreign_table: String,
38    pub foreign_column: String,
39}
40
41#[derive(Serialize, Deserialize, Debug)]
42pub struct ColumnEnumDetails {
43    pub value: String,
44    #[serde(skip_serializing_if = "Option::is_none")]
45    pub desc: Option<String>,
46}