use rullst_orm::schema::{Blueprint, Schema};
use rullst_orm::{FromRow, Orm};
#[derive(Debug, Clone, FromRow, rullst_orm::Orm)]
#[orm(table = "users")]
pub struct User {
pub id: i32,
pub full_name: String,
pub age: i32,
}
#[tokio::main]
async fn main() -> Result<(), rullst_orm::Error> {
let _ = std::fs::remove_file("compile_time_safety.db");
std::fs::File::create("compile_time_safety.db").unwrap();
Orm::init("sqlite://compile_time_safety.db").await?;
Schema::create("users", |table: &mut Blueprint| {
table.id();
table.string("full_name").not_null();
table.integer("age").not_null();
})
.await?;
let mut u1 = User {
id: 0,
full_name: "Alice Smith".to_string(),
age: 25,
};
u1.save().await?;
let mut u2 = User {
id: 0,
full_name: "Bob Jones".to_string(),
age: 30,
};
u2.save().await?;
println!("--- Testing Compile-Time Safety ---");
let users = User::query()
.select_cols(&[UserColumn::Id, UserColumn::FullName, UserColumn::Age])
.where_col(UserColumn::Age, 25)
.order_by_desc_col(UserColumn::Id)
.get()
.await?;
for u in users {
println!("Found user: {} (ID: {})", u.full_name, u.id);
}
Ok(())
}