fusionsql_core/
utils.rs

1// use crate::filter::OpValValue;
2#[cfg(feature = "with-sea-query")]
3use crate::filter::{IntoSeaError, SeaResult};
4#[allow(unused_imports)]
5use chrono::{DateTime, Duration, FixedOffset, Utc};
6#[allow(unused_imports)]
7use serde::{Deserialize, Serialize};
8
9// pub fn try_into_op_vals_value_opt<V: Serialize>(value: V) -> Result<Option<OpValValue>, serde_json::Error> {
10//   let value = serde_json::to_value(value)?;
11
12//   let values: OpValValue = serde_json::from_value(value)?;
13
14//   Ok(if values.0.is_empty() { None } else { Some(values) })
15// }
16
17#[cfg(all(feature = "with-uuid", feature = "with-sea-query"))]
18pub fn uuid_to_sea_value(json_value: serde_json::Value) -> SeaResult<sea_query::Value> {
19  Ok(uuid::Uuid::deserialize(json_value)?.into())
20}
21
22#[cfg(feature = "with-sea-query")]
23pub fn datetime_to_sea_value(v: serde_json::Value) -> SeaResult<sea_query::Value> {
24  if v.as_str().is_some() {
25    let dt = DateTime::<FixedOffset>::deserialize(v)?.into();
26    Ok(dt)
27  } else if let Some(i) = v.as_i64() {
28    let d = DateTime::<Utc>::UNIX_EPOCH + Duration::milliseconds(i);
29    Ok(sea_query::Value::ChronoDateTimeUtc(Some(Box::new(d))))
30  } else {
31    Err(IntoSeaError::Custom(format!("Invalid value, need OffsetDateTime. incoming value is {:?}", v)))
32  }
33}