-
Notifications
You must be signed in to change notification settings - Fork 38
/
Copy pathmain.rs
78 lines (60 loc) · 1.66 KB
/
main.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
use toasty::stmt::Id;
#[derive(Debug)]
#[toasty::model(table = user_and_packages)]
struct User {
#[key]
#[auto]
id: Id<Self>,
name: String,
#[unique]
email: String,
#[has_many]
packages: [Package],
}
#[derive(Debug)]
#[toasty::model(table = user_and_packages)]
#[key(partition = user_id, local = id)]
struct Package {
#[belongs_to(key = user_id, references = id)]
user: User,
user_id: Id<User>,
#[auto]
id: Id<Self>,
name: String,
}
#[tokio::main]
async fn main() -> toasty::Result<()> {
let db = toasty::Db::builder()
.register::<User>()
.register::<Package>()
.connect(
std::env::var("TOASTY_CONNECTION_URL")
.as_deref()
.unwrap_or("sqlite::memory:"),
)
.await?;
// For now, reset!s
db.reset_db().await?;
println!("==> let u1 = User::create()");
let u1 = User::create()
.name("John Doe")
.email("john@example.com")
.exec(&db)
.await?;
println!(" -> u1 = {u1:#?}");
println!("==> let u2 = User::create()");
let u2 = User::create()
.name("Jane doe")
.email("jane@example.com")
.exec(&db)
.await?;
println!(" -> u2 = {u2:#?}");
let p1 = u1.packages().create().name("tokio").exec(&db).await?;
println!("==> Package::find_by_user_and_id(&u1, &p1.id)");
let package = Package::get_by_user_id_and_id(&db, &u1.id, &p1.id).await?;
println!("{package:#?}");
println!("==> u1.packages().all(&db)");
let packages = u1.packages().all(&db).await?.collect::<Vec<_>>().await;
println!("packages = {packages:#?}");
Ok(())
}