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}