The goal is for pg-worm
to become a straight forward and easy-to-use ORM.
Currently this means providing a derivable Model
trait which provides
various functionality.
```rust use pg_worm::{register, connect, Model, NoTls};
struct Book { #[column(dtype = "BIGSERIAL", primary_key, unique)] id: i64, #[column(dtype = "TEXT", unique)] title: String, }
async fn main() -> Result<(), pgworm::Error> { // First create a connection. This can be only done _once. let conn = connect("postgres://me:me@localhost:5432", NoTls).await?; // Boilerplate needed for the connection to start listening. tokio::spawn(async move { conn.await.unwrap() });
// Then, register the model with the pg_worm client.
//
// This creates a completely new table.
// Beware that should there already be a table
// with the same name, it will be dropped.
register!(Book).await?;
// Next, insert a new book.
// This works by passing values for all
// fields which aren't autogenerated.
Book::insert(
"Foo - Part II".to_string()
).await?;
// Query all entities from the database
let books = Book::select().await;
assert_eq!(books.len(), 1);
assert_eq!(books[0].title, "Foo - Part II");
// Alternatively, query exactly one book.
let book: Option<Book> = Book::select_one().await;
assert!(book.is_some());
Ok(())
} ```