// 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::{mysql::MySqlValueRef, TypeInfo, Value, ValueRef}; use time::{Date, OffsetDateTime, PrimitiveDateTime, Time}; use crate::Error; pub(crate) fn to_json(v: MySqlValueRef) -> Result { if v.is_null() { return Ok(JsonValue::Null); } let res = match v.type_info().name() { "CHAR" | "VARCHAR" | "TINYTEXT" | "TEXT" | "MEDIUMTEXT" | "LONGTEXT" | "ENUM" => { if let Ok(v) = ValueRef::to_owned(&v).try_decode() { JsonValue::String(v) } else { JsonValue::Null } } "FLOAT" => { if let Ok(v) = ValueRef::to_owned(&v).try_decode::() { JsonValue::from(v) } else { JsonValue::Null } } "DOUBLE" => { if let Ok(v) = ValueRef::to_owned(&v).try_decode::() { JsonValue::from(v) } else { JsonValue::Null } } "TINYINT" | "SMALLINT" | "INT" | "MEDIUMINT" | "BIGINT" => { if let Ok(v) = ValueRef::to_owned(&v).try_decode::() { JsonValue::Number(v.into()) } else { JsonValue::Null } } "TINYINT UNSIGNED" | "SMALLINT UNSIGNED" | "INT UNSIGNED" | "MEDIUMINT UNSIGNED" | "BIGINT UNSIGNED" | "YEAR" => { if let Ok(v) = ValueRef::to_owned(&v).try_decode::() { JsonValue::Number(v.into()) } else { JsonValue::Null } } "BOOLEAN" => { 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::