use serde_json::Value as JsonValue; use sqlx::{postgres::PgValueRef, TypeInfo, Value, ValueRef}; use time::{Date, OffsetDateTime, PrimitiveDateTime, Time}; use crate::Error; pub(crate) fn to_json(v: PgValueRef) -> Result { if v.is_null() { return Ok(JsonValue::Null); } let res = match v.type_info().name() { "CHAR" | "VARCHAR" | "TEXT" | "NAME" => { if let Ok(v) = ValueRef::to_owned(&v).try_decode() { JsonValue::String(v) } else { JsonValue::Null } } "FLOAT4" | "FLOAT8" => { if let Ok(v) = ValueRef::to_owned(&v).try_decode::() { JsonValue::from(v) } else { JsonValue::Null } } "INT2" | "INT4" | "INT8" => { if let Ok(v) = ValueRef::to_owned(&v).try_decode::() { JsonValue::Number(v.into()) } else { JsonValue::Null } } "BOOL" => { if let Ok(v) = ValueRef::to_owned(&v).try_decode() { JsonValue::Bool(v) } else { JsonValue::Null } } "DATE" => { if let Ok(v) = ValueRef::to_owned(&v).try_decode::() { JsonValue::String(v.to_string()) } else { JsonValue::Null } } "TIME" => { if let Ok(v) = ValueRef::to_owned(&v).try_decode::