use super::ladder;
use serde_json::Value;
use sqlx::{Column, Row, ValueRef};
pub fn pg_row(row: &sqlx::postgres::PgRow) -> serde_json::Map<String, Value> {
let mut map = serde_json::Map::new();
for column in row.columns() {
let name = column.name();
map.insert(name.to_string(), pg_value(row, name));
}
map
}
pub fn pg_display(row: &sqlx::postgres::PgRow, name: &str) -> String {
match pg_value(row, name) {
Value::Null => "NULL".to_string(),
Value::String(text) => text,
other => other.to_string(),
}
}
fn pg_value(row: &sqlx::postgres::PgRow, name: &str) -> Value {
match row.try_get_raw(name) {
Ok(raw) if raw.is_null() => Value::Null,
Ok(_) => ladder::decode(row, name),
Err(_) => Value::String("<error>".to_string()),
}
}