use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Default)]
pub struct ColumnMetadata {
pub name: String,
pub ordinal_position: i32,
pub sql_type_name: String, pub udt_name: Option<String>, pub internal_axion_type: String, pub rust_type_string: String, pub is_nullable: bool,
pub is_primary_key: bool,
pub is_unique: bool,
pub default_value: Option<String>,
pub foreign_key_reference: Option<ForeignKeyReference>,
pub character_maximum_length: Option<i32>,
pub numeric_precision: Option<i32>,
pub numeric_scale: Option<i32>,
pub comment: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct ForeignKeyReference {
pub foreign_table_schema: String,
pub foreign_table_name: String,
pub foreign_column_name: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Default)]
pub struct TableMetadata {
pub schema: String,
pub name: String,
pub columns: Vec<ColumnMetadata>,
pub primary_key_columns: Vec<String>,
pub comment: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Default)]
pub struct ViewMetadata {
pub schema: String,
pub name: String,
pub definition: Option<String>,
pub columns: Vec<ColumnMetadata>,
pub comment: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub enum ParameterMode {
In,
Out,
InOut,
Variadic,
}
impl Default for ParameterMode {
fn default() -> Self {
ParameterMode::In
}
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Default)]
pub struct ParameterMetadata {
pub name: String,
pub sql_type_name: String,
pub udt_name: Option<String>,
pub internal_axion_type: String,
pub rust_type_string: String,
pub mode: ParameterMode,
pub ordinal_position: i32,
pub has_default: bool,
pub default_value: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub enum FunctionKind {
Scalar,
Table,
Aggregate,
Window,
Procedure, Trigger, }
impl Default for FunctionKind {
fn default() -> Self {
FunctionKind::Scalar
}
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Default)]
pub struct FunctionMetadata {
pub schema: String,
pub name: String,
pub parameters: Vec<ParameterMetadata>,
pub return_sql_type_name: String,
pub return_udt_name: Option<String>,
pub return_internal_axion_type: String,
pub return_rust_type_string: String,
pub kind: FunctionKind,
pub definition: Option<String>,
pub comment: Option<String>,
pub is_strict: Option<bool>, pub volatility: Option<String>, }
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Default)]
pub struct EnumValueMetadata {
pub value: String,
pub sort_order: Option<i32>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Default)]
pub struct EnumMetadata {
pub schema: String,
pub name: String,
pub values: Vec<EnumValueMetadata>,
pub comment: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct SchemaMetadata {
pub name: String,
pub tables: HashMap<String, TableMetadata>,
pub views: HashMap<String, ViewMetadata>,
pub functions: HashMap<String, FunctionMetadata>, pub enums: HashMap<String, EnumMetadata>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct DatabaseMetadata {
pub schemas: HashMap<String, SchemaMetadata>,
}