use serde::{Deserialize, Serialize};
use std::collections::{HashMap, HashSet};
#[derive(Debug, Clone, Serialize, PartialEq)]
pub struct TableInfo {
pub name: String,
pub schema: String,
pub columns: Vec<ColumnInfo>,
}
#[derive(Debug, Clone, Serialize, PartialEq)]
pub struct SchemaInfo {
pub name: String,
pub tables: Vec<TableInfo>,
}
#[derive(Debug, Clone, Serialize, PartialEq)]
pub struct TablesBySchema {
pub schemas: Vec<SchemaInfo>,
}
#[derive(Debug, Clone, Serialize, PartialEq)]
pub struct ColumnInfo {
pub name: String,
pub data_type: String,
pub is_nullable: bool,
pub is_primary_key: bool,
pub default_value: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub enum_values: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub foreign_key: Option<ForeignKeyInfo>,
}
#[derive(Debug, Clone, Serialize, PartialEq)]
pub struct ForeignKeyInfo {
pub referenced_table: String,
pub referenced_schema: String,
pub referenced_column: String,
}
#[derive(Debug, Clone, Serialize, PartialEq)]
pub struct TableRow {
pub columns: HashSet<String>,
pub data: HashMap<String, String>,
}
#[derive(Debug, Clone, Serialize, PartialEq)]
pub struct TableData {
pub rows: Vec<TableRow>,
pub total_rows: u64,
pub columns: Vec<ColumnInfo>,
}
#[derive(Deserialize, PartialEq, Debug, Clone)]
pub struct UpdateData {
pub table_name: String,
pub changes: Vec<Change>,
}
#[derive(Deserialize, PartialEq, Debug, Clone)]
pub struct Change {
pub primary_key_values: HashMap<String, String>,
pub updated_row: HashMap<String, String>,
pub original_row: HashMap<String, String>,
}