Derive FromRow
to generate a mapping between a struct and postgres rows.
This crate works with postgres by default.
toml
[dependencies]
postgres_from_row = "0.3.0"
If you want to use it with tokio-postgres, enable it like so:
toml
[dependencies]
postgres_from_row = { version = "0.3.0", default_features = false, features = ["tokio-postgres"] }
```rust use postgresfromrow::FromRow;
struct Todo { todoid: i32, text: String authorid: i32, }
let row = client.queryone("SELECT todoid, text, author_id FROM todos").unwrap();
// Pass a row with the correct columns. let todo = Todo::from_row(&row);
let row = client.query_one("SELECT foo FROM bar").unwrap();
// Use try_from_row
if the operation could fail.
let todo = Todo::tryfromrow(&row);
assert!(todo.is_err());
```
Each field need's to implement postgres::types::FromSql
, as this will be used to convert a
single column to the specified type. If you want to override this behavior and delegate it to a
nested structure that also implements FromRow
, use #[from_row(flatten)]
:
```rust use postgresfromrow::FromRow;
struct Todo { todoid: i32, text: String, #[fromrow(flatten)] author: User }
struct User { user_id: i32, username: String }
let row = client.queryone("SELECT todoid, text, userid, username FROM todos t, users u WHERE t.authorid = u.userid").unwrap(); let todo = Todo::fromrow(&row); ```