diff --git a/Cargo.toml b/Cargo.toml index bb9013b3..2c407639 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -70,7 +70,7 @@ default = [ ] macros = ["sea-orm-macros"] mock = [] -with-json = ["serde_json", "sea-query/with-json", "chrono/serde", "sqlx?/json"] +with-json = ["serde_json", "sea-query/with-json", "chrono/serde", "time/serde", "sqlx?/json"] with-chrono = ["chrono", "sea-query/with-chrono", "sqlx?/chrono"] with-rust_decimal = ["rust_decimal", "sea-query/with-rust_decimal", "sqlx?/decimal"] with-uuid = ["uuid", "sea-query/with-uuid", "sqlx?/uuid"] diff --git a/src/query/json.rs b/src/query/json.rs index 28aa1146..e1c1f0bf 100644 --- a/src/query/json.rs +++ b/src/query/json.rs @@ -54,6 +54,14 @@ impl FromQueryResult for JsonValue { match_mysql_type!(chrono::NaiveDateTime); #[cfg(feature = "with-chrono")] match_mysql_type!(chrono::DateTime); + #[cfg(feature = "with-time")] + match_mysql_type!(time::Date); + #[cfg(feature = "with-time")] + match_mysql_type!(time::Time); + #[cfg(feature = "with-time")] + match_mysql_type!(time::PrimitiveDateTime); + #[cfg(feature = "with-time")] + match_mysql_type!(time::OffsetDateTime); #[cfg(feature = "with-rust_decimal")] match_mysql_type!(rust_decimal::Decimal); #[cfg(feature = "with-json")] @@ -106,6 +114,14 @@ impl FromQueryResult for JsonValue { match_postgres_type!(chrono::NaiveDateTime); #[cfg(feature = "with-chrono")] match_postgres_type!(chrono::DateTime); + #[cfg(feature = "with-time")] + match_postgres_type!(time::Date); + #[cfg(feature = "with-time")] + match_postgres_type!(time::Time); + #[cfg(feature = "with-time")] + match_postgres_type!(time::PrimitiveDateTime); + #[cfg(feature = "with-time")] + match_postgres_type!(time::OffsetDateTime); #[cfg(feature = "with-rust_decimal")] match_postgres_type!(rust_decimal::Decimal); #[cfg(feature = "with-json")] diff --git a/tests/time_crate_tests.rs b/tests/time_crate_tests.rs index f7a4cff0..6419919c 100644 --- a/tests/time_crate_tests.rs +++ b/tests/time_crate_tests.rs @@ -1,6 +1,7 @@ pub mod common; pub use common::{features::*, setup::*, TestContext}; use sea_orm::{entity::prelude::*, DatabaseConnection, IntoActiveModel}; +use serde_json::json; use time::macros::{date, time}; #[sea_orm_macros::test] @@ -42,5 +43,31 @@ pub async fn create_transaction_log(db: &DatabaseConnection) -> Result<(), DbErr Some(transaction_log.clone()) ); + let json = TransactionLog::find().into_json().one(db).await?.unwrap(); + + #[cfg(feature = "sqlx-postgres")] + assert_eq!( + json, + json!({ + "id": 1, + "date": "2022-03-13", + "time": "16:24:00", + "date_time": "2022-03-13T16:24:00", + "date_time_tz": "2022-03-13T16:24:00+00:00", + }) + ); + + #[cfg(feature = "sqlx-mysql")] + assert_eq!( + json, + json!({ + "id": 1, + "date": "2022-03-13", + "time": "16:24:00", + "date_time": "2022-03-13T16:24:00", + "date_time_tz": "2022-03-13T16:24:00Z", + }) + ); + Ok(()) }