Rust Structs
rust
Generate Rust structs with serde derives from SQL schema
Example Output
Generated from the pet-store sample schema:
rust
use bigdecimal::BigDecimal;
use chrono::NaiveDate;
use chrono::NaiveDateTime;
use chrono::{DateTime, Utc};
use serde::{Serialize, Deserialize};
use serde_json::Value;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Adoption {
pub id: i32,
pub pet_id: i32,
pub owner_id: i32,
pub adopted_at: NaiveDateTime,
pub adoption_fee: bigdecimal::BigDecimal,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AdoptionsAuditLog {
pub id: i64,
pub table_name: String,
pub operation: String,
pub old_data: Option<serde_json::Value>,
pub new_data: Option<serde_json::Value>,
pub changed_at: DateTime<Utc>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Category {
pub id: i32,
pub name: String,
pub description: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct LegacyInventory {
pub id: i32,
pub item_name: Option<String>,
pub old_sku: Option<String>,
pub quantity: Option<i32>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Location {
pub id: i32,
pub name: String,
pub address: String,
pub city: String,
pub zip: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MedicalRecord {
pub id: i32,
pub pet_id: i32,
pub visit_date: NaiveDate,
pub diagnosis: String,
pub treatment: Option<String>,
pub vet_name: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Owner {
pub id: i32,
pub name: String,
pub email: String,
pub phone: Option<String>,
pub created_at: Option<NaiveDateTime>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Pet {
pub id: i32,
pub category_id: Option<i32>,
pub name: String,
pub sku: String,
pub price: bigdecimal::BigDecimal,
pub internal_notes: Option<String>,
pub status: String,
pub created_at: Option<NaiveDateTime>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Review {
pub id: i32,
pub pet_id: i32,
pub owner_id: i32,
pub rating: i32,
pub body: Option<String>,
pub location_id: Option<i32>,
pub created_at: Option<NaiveDateTime>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct StaffAuditLog {
pub id: i64,
pub table_name: String,
pub operation: String,
pub old_data: Option<serde_json::Value>,
pub new_data: Option<serde_json::Value>,
pub changed_at: DateTime<Utc>,
}Usage
Add to your sqldoc.config.ts:
typescript
export default {
dialect: 'postgres',
schema: ['./schema.sql'],
codegen: [
{
template: 'rust-structs',
output: './generated/models.rs',
},
],
}Then run:
bash
sqldoc codegen