axum_sql_viewer/
schema.rs1use serde::{Deserialize, Serialize};
6
7#[derive(Debug, Clone, Serialize, Deserialize)]
9#[serde(rename_all = "camelCase")]
10pub struct TableSchema {
11 pub name: String,
13
14 pub columns: Vec<ColumnInfo>,
16
17 pub primary_key: Option<Vec<String>>,
19
20 pub foreign_keys: Vec<ForeignKey>,
22
23 pub indexes: Vec<IndexInfo>,
25}
26
27#[derive(Debug, Clone, Serialize, Deserialize)]
29#[serde(rename_all = "camelCase")]
30pub struct ColumnInfo {
31 pub name: String,
33
34 pub data_type: String,
36
37 pub nullable: bool,
39
40 pub default_value: Option<String>,
42
43 pub is_primary_key: bool,
45}
46
47#[derive(Debug, Clone, Serialize, Deserialize)]
49#[serde(rename_all = "camelCase")]
50pub struct ForeignKey {
51 pub column: String,
53
54 pub references_table: String,
56
57 pub references_column: String,
59}
60
61#[derive(Debug, Clone, Serialize, Deserialize)]
63#[serde(rename_all = "camelCase")]
64pub struct IndexInfo {
65 pub name: String,
67
68 pub columns: Vec<String>,
70
71 pub unique: bool,
73}
74
75#[derive(Debug, Clone, Serialize, Deserialize)]
77#[serde(rename_all = "camelCase")]
78pub struct TableInfo {
79 pub name: String,
81
82 pub row_count: Option<u64>,
84}
85
86#[derive(Debug, Clone, Deserialize)]
88#[serde(rename_all = "camelCase")]
89pub struct RowQuery {
90 #[serde(default)]
92 pub offset: u64,
93
94 #[serde(default = "default_limit")]
96 pub limit: u64,
97
98 pub sort_by: Option<String>,
100
101 pub sort_order: Option<SortOrder>,
103
104 #[serde(default)]
106 pub filters: std::collections::HashMap<String, String>,
107}
108
109fn default_limit() -> u64 {
110 100
111}
112
113#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
115#[serde(rename_all = "camelCase")]
116pub enum SortOrder {
117 Ascending,
118 Descending,
119}
120
121#[derive(Debug, Clone, Serialize, Deserialize)]
123#[serde(rename_all = "camelCase")]
124pub struct RowsResponse {
125 pub rows: Vec<serde_json::Value>,
127
128 pub columns: Vec<String>,
130
131 pub total: u64,
133
134 pub offset: u64,
136
137 pub limit: u64,
139
140 pub has_more: bool,
142}
143
144#[derive(Debug, Clone, Serialize, Deserialize)]
146#[serde(rename_all = "camelCase")]
147pub struct TablesResponse {
148 pub tables: Vec<TableInfo>,
150}
151
152#[derive(Debug, Clone, Deserialize)]
154#[serde(rename_all = "camelCase")]
155pub struct QueryRequest {
156 pub sql: String,
158}
159
160#[derive(Debug, Clone, Serialize, Deserialize)]
162#[serde(rename_all = "camelCase")]
163pub struct QueryResult {
164 pub columns: Vec<String>,
166
167 pub rows: Vec<serde_json::Value>,
169
170 pub affected_rows: u64,
172
173 pub execution_time_milliseconds: u64,
175
176 pub error: Option<String>,
178}
179
180#[derive(Debug, Clone, Serialize, Deserialize)]
182#[serde(rename_all = "camelCase")]
183pub struct CountResponse {
184 pub count: u64,
186}