5 releases

0.2.0 Aug 8, 2020
0.1.3 Mar 18, 2019
0.1.2 Dec 3, 2018
0.1.1 Dec 3, 2018
0.1.0 Nov 21, 2018

#1182 in Parser implementations

Download history 421/week @ 2024-07-23 376/week @ 2024-07-30 362/week @ 2024-08-06 396/week @ 2024-08-13 381/week @ 2024-08-20 474/week @ 2024-08-27 447/week @ 2024-09-03 253/week @ 2024-09-10 400/week @ 2024-09-17 523/week @ 2024-09-24 512/week @ 2024-10-01 372/week @ 2024-10-08 528/week @ 2024-10-15 514/week @ 2024-10-22 681/week @ 2024-10-29 764/week @ 2024-11-05

2,567 downloads per month

MIT/Apache

25KB
502 lines

Serde Postgres

Build status Crate Lines Of Code Documentation

Easily deserialize rows from tokio-postgres or postgres into arbitrary structs. (Only deserialization is supported).

Examples

tokio-postgres (asynchronous)

use std::error::Error;
use serde::Deserialize;
use tokio_postgres::{connect, NoTls};

#[derive(Clone, Debug, Deserialize)]
struct Person {
    name: String,
    age: i32,
}

#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
    let (client, connection) = connect("postgres://postgres@localhost:5432", NoTls).await?;
    tokio::spawn(connection);

    client.execute("CREATE TABLE IF NOT EXISTS Person (
        name VARCHAR NOT NULL,
        age INT NOT NULL
    )", &[]).await?;

    client.execute("INSERT INTO Person (name, age) VALUES ($1, $2)",
                       &[&"Jane", &23i32]).await?;

    client.execute("INSERT INTO Person (name, age) VALUES ($1, $2)",
                       &[&"Alice", &32i32]).await?;

    let rows = client.query("SELECT name, age FROM Person", &[]).await?;

    let people: Vec<Person> = serde_postgres::from_rows(&rows)?;

    for person in people {
        println!("{:?}", person);
    }

    Ok(())
}

postgres (synchronous)

use postgres::{Client, NoTls};
use serde::Deserialize;
use std::error::Error;

#[derive(Clone, Debug, Deserialize)]
struct Person {
    name: String,
    age: i32,
}

fn main() -> Result<(), Box<dyn Error>> {
    let mut client = Client::connect("postgres://postgres@localhost:5432", NoTls)?;

    client.execute("CREATE TABLE IF NOT EXISTS Person (
        name VARCHAR NOT NULL,
        age INT NOT NULL
    )", &[])?;

    client.execute("INSERT INTO Person (name, age) VALUES ($1, $2)",
                   &[&"Jane", &23i32])?;
    
    client.execute("INSERT INTO Person (name, age) VALUES ($1, $2)",
                   &[&"Alice", &32i32])?;

    let rows = client.query("SELECT name, age FROM Person", &[])?;

    let people: Vec<Person> = serde_postgres::from_rows(&rows)?;

    for person in people {
        println!("{:?}", person);
    }

    Ok(())
}

Dependencies

~11MB
~207K SLoC