// Copyright 2019-2023 Tauri Programme within The Commons Conservancy // SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: MIT 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" | "UUID" => { if let Ok(v) = ValueRef::to_owned(&v).try_decode() { JsonValue::String(v) } else { JsonValue::Null } } "FLOAT4" => { if let Ok(v) = ValueRef::to_owned(&v).try_decode::() { JsonValue::from(v) } else { JsonValue::Null } } "FLOAT8" => { if let Ok(v) = ValueRef::to_owned(&v).try_decode::() { JsonValue::from(v) } else { JsonValue::Null } } "INT2" => { if let Ok(v) = ValueRef::to_owned(&v).try_decode::() { JsonValue::Number(v.into()) } else { JsonValue::Null } } "INT4" => { if let Ok(v) = ValueRef::to_owned(&v).try_decode::() { JsonValue::Number(v.into()) } else { JsonValue::Null } } "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::