use serde_json::Value;
use sqlx::Row;
pub(super) fn integer(row: &sqlx::postgres::PgRow, name: &str) -> Option<Value> {
if let Ok(value) = row.try_get::<i16, _>(name) {
return Some(serde_json::json!(value));
}
if let Ok(value) = row.try_get::<i32, _>(name) {
return Some(serde_json::json!(value));
}
if let Ok(value) = row.try_get::<i64, _>(name) {
return Some(serde_json::json!(value));
}
None
}
pub(super) fn float(row: &sqlx::postgres::PgRow, name: &str) -> Option<Value> {
if let Ok(value) = row.try_get::<f32, _>(name) {
return Some(serde_json::json!(value));
}
if let Ok(value) = row.try_get::<f64, _>(name) {
return Some(serde_json::json!(value));
}
None
}
pub(super) fn stringly(row: &sqlx::postgres::PgRow, name: &str) -> Option<Value> {
if let Ok(value) = row.try_get::<sqlx::types::Uuid, _>(name) {
return Some(Value::String(value.to_string()));
}
if let Ok(value) = row.try_get::<sqlx::types::BigDecimal, _>(name) {
return Some(Value::String(value.to_string()));
}
temporal(row, name)
}
fn temporal(row: &sqlx::postgres::PgRow, name: &str) -> Option<Value> {
if let Ok(value) = row.try_get::<chrono::DateTime<chrono::Utc>, _>(name) {
return Some(Value::String(value.to_rfc3339()));
}
if let Ok(value) = row.try_get::<chrono::NaiveDateTime, _>(name) {
return Some(Value::String(value.to_string()));
}
if let Ok(value) = row.try_get::<chrono::NaiveDate, _>(name) {
return Some(Value::String(value.to_string()));
}
if let Ok(value) = row.try_get::<chrono::NaiveTime, _>(name) {
return Some(Value::String(value.to_string()));
}
None
}