Skip to content
On this page

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