Closed
Description
How would one work with new-type structs and ToSql
?
See the following example where I'm trying to use pub struct Id(i32)
:
#[macro_use]
extern crate postgres;
#[macro_use]
extern crate postgres_derive;
use postgres::{Connection, TlsMode};
#[derive(ToSql, FromSql, Debug)]
pub struct Id(pub i32);
#[derive(Debug, ToSql, FromSql)]
#[postgres(name = "person")]
struct Person {
id: Id,
name: String,
}
fn main() {
let conn = Connection::connect(
"postgres://postgres:pw@localhost:5432/postgres",
TlsMode::None,
).unwrap();
conn.execute("DROP SCHEMA p CASCADE", &[]);
conn.execute("CREATE SCHEMA p", &[]);
conn.execute(
"CREATE TYPE p.person AS (
id INT,
name TEXT
)",
&[],
).unwrap();
conn.execute(
"CREATE TABLE p.persons (
id SERIAL PRIMARY KEY,
person p.person
)",
&[],
).unwrap();
let me = Person {
id: Id(0),
//id: 0,
name: "Steven".to_string(),
};
println!("Trying to insert {:?}", me);
conn.execute("INSERT INTO p.persons (person) VALUES ($1)", &[&me])
.unwrap();
for row in &conn.query("SELECT person FROM p.persons", &[]).unwrap() {
let person: Person = row.get_opt(0).unwrap().unwrap();
println!("Found person {}", person.name);
}
}
Running `target/debug/postgres-new-type-example`
Trying to insert Person { id: Id(0), name: "Steven" }
thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Error(Conversion(WrongType(Type(Other(Other { name: "person", oid: 18910, kind: Composite([Field { name: "id", type_:
Type(Int4) }, Field { name: "name", type_: Type(Text) }]), schema: "p" })))))', /checkout/src/libcore/result.rs:906:4
Metadata
Metadata
Assignees
Labels
No labels