from-pg 0.1.0

Trait for converting a postgres row into a struct
Documentation
use from_pg::FromPg;
use tokio_postgres::Row;

#[derive(FromPg)]
pub struct User {
    pub id: i64,
    pub name: String,
    #[frompg(from = &str, func = text_to_permission)]
    pub permission: Permission,
}

pub fn text_to_permission(s: &str) -> Result<Permission, Box<dyn std::error::Error + Send + Sync>> {
    match s {
        "read" => Ok(Permission::Read),
        "write" => Ok(Permission::Write),
        "admin" => Ok(Permission::Admin),
        _ => Err(Box::<dyn std::error::Error + Send + Sync>::from(
            "invalid permission",
        )),
    }
}

pub enum Permission {
    Read,
    Write,
    Admin,
}

#[derive(FromPg)]
pub struct EmptyStruct {}

#[allow(dead_code)]
fn test_func(row: &Row) {
    let _ = User::from_pg_default(row);
    let _ = EmptyStruct::from_pg_default(row);

    let _ = User::from_pg(
        row,
        &UserConfig::new()
            .prefix_name("user".into())
            .set_permission("perm".into()),
    );
}