Skip to main content

orm_demo/
orm_demo.rs

1use rustio_core::{Db, Error, Model, Row, Value};
2
3#[derive(Debug)]
4struct User {
5    id: i64,
6    name: String,
7    is_admin: bool,
8}
9
10impl Model for User {
11    const TABLE: &'static str = "users";
12    const COLUMNS: &'static [&'static str] = &["id", "name", "is_admin"];
13    const INSERT_COLUMNS: &'static [&'static str] = &["name", "is_admin"];
14
15    fn id(&self) -> i64 {
16        self.id
17    }
18
19    fn from_row(row: Row<'_>) -> Result<Self, Error> {
20        Ok(Self {
21            id: row.get_i64("id")?,
22            name: row.get_string("name")?,
23            is_admin: row.get_bool("is_admin")?,
24        })
25    }
26
27    fn insert_values(&self) -> Vec<Value> {
28        vec![self.name.clone().into(), self.is_admin.into()]
29    }
30}
31
32#[tokio::main]
33async fn main() -> Result<(), Error> {
34    let db = Db::memory().await?;
35    db.execute(
36        "CREATE TABLE users (
37            id INTEGER PRIMARY KEY AUTOINCREMENT,
38            name TEXT NOT NULL,
39            is_admin INTEGER NOT NULL
40        )",
41    )
42    .await?;
43
44    let alice_id = User {
45        id: 0,
46        name: "Alice".into(),
47        is_admin: false,
48    }
49    .create(&db)
50    .await?;
51    let bob_id = User {
52        id: 0,
53        name: "Bob".into(),
54        is_admin: true,
55    }
56    .create(&db)
57    .await?;
58    println!("created ids: alice={alice_id} bob={bob_id}");
59
60    let alice = User::find(&db, alice_id).await?.expect("alice");
61    println!("find alice: {alice:?}");
62
63    let all = User::all(&db).await?;
64    println!("all: {all:?}");
65
66    let renamed = User {
67        id: alice_id,
68        name: "Alicia".into(),
69        is_admin: false,
70    };
71    renamed.update(&db).await?;
72    let after_update = User::find(&db, alice_id).await?.unwrap();
73    println!("after update: {after_update:?}");
74
75    User::delete(&db, bob_id).await?;
76    println!("remaining after delete bob: {:?}", User::all(&db).await?);
77
78    Ok(())
79}