From a0145a1fafde93b951eb5648c10287f5cdc4f38f Mon Sep 17 00:00:00 2001 From: antejavor Date: Mon, 10 Nov 2025 18:57:48 +0100 Subject: [PATCH 1/2] Fix warnings. --- src/value/mod.rs | 22 +++++++++++----------- src/value/tests.rs | 20 ++++++++++---------- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/src/value/mod.rs b/src/value/mod.rs index 2c54bb4..f2fadc6 100644 --- a/src/value/mod.rs +++ b/src/value/mod.rs @@ -13,7 +13,7 @@ // limitations under the License. use super::bindings; -use chrono::{Datelike, Duration, NaiveDate, NaiveDateTime, NaiveTime, Timelike}; +use chrono::{Datelike, Duration, NaiveDate, NaiveDateTime, NaiveTime, TimeZone, Timelike, Utc}; use std::collections::HashMap; use std::convert::TryFrom; use std::ffi::{CStr, CString}; @@ -269,7 +269,7 @@ const NSEC_IN_SEC: i64 = 1_000_000_000; pub(crate) fn mg_value_naive_date(mg_value: *const bindings::mg_value) -> Result { let c_date = unsafe { bindings::mg_value_date(mg_value) }; let c_delta_days = unsafe { bindings::mg_date_days(c_date) }; - let epoch_date = NaiveDate::from_ymd(1970, 1, 1); + let epoch_date = NaiveDate::from_ymd_opt(1970, 1, 1).unwrap(); let delta_days = Duration::days(c_delta_days); Ok(epoch_date.checked_add_signed(delta_days).unwrap()) } @@ -281,10 +281,10 @@ pub(crate) fn mg_value_naive_local_time( let c_nanoseconds = unsafe { bindings::mg_local_time_nanoseconds(c_local_time) }; let seconds = u32::try_from(c_nanoseconds / NSEC_IN_SEC)?; let nanoseconds = u32::try_from(c_nanoseconds % NSEC_IN_SEC)?; - Ok(NaiveTime::from_num_seconds_from_midnight( + Ok(NaiveTime::from_num_seconds_from_midnight_opt( seconds, nanoseconds, - )) + ).unwrap()) } pub(crate) fn mg_value_naive_local_date_time( @@ -294,7 +294,7 @@ pub(crate) fn mg_value_naive_local_date_time( let c_seconds = unsafe { bindings::mg_local_date_time_seconds(c_local_date_time) }; let c_nanoseconds = unsafe { bindings::mg_local_date_time_nanoseconds(c_local_date_time) }; let nanoseconds = u32::try_from(c_nanoseconds)?; - Ok(NaiveDateTime::from_timestamp(c_seconds, nanoseconds)) + Ok(Utc.timestamp_opt(c_seconds, nanoseconds).unwrap().naive_utc()) } fn mg_value_datetime_zone_id( @@ -306,9 +306,9 @@ fn mg_value_datetime_zone_id( unsafe { bindings::mg_date_time_zone_id_timezone_name(c_datetime_zone_id) }; // Create NaiveDateTime from timestamp - let naive_datetime = match NaiveDateTime::from_timestamp_opt(c_seconds, c_nanoseconds as u32) { - Some(dt) => dt, - None => { + let naive_datetime = match Utc.timestamp_opt(c_seconds, c_nanoseconds as u32) { + chrono::LocalResult::Single(dt) => dt.naive_utc(), + _ => { return Err(crate::error::MgError::new( "Invalid timestamp values".to_string(), )) @@ -319,7 +319,7 @@ fn mg_value_datetime_zone_id( let timezone_name = if c_timezone_name_ptr.is_null() { "UTC".to_string() } else { - unsafe { mg_string_to_string(c_timezone_name_ptr) } + mg_string_to_string(c_timezone_name_ptr) }; // Extract individual date/time fields @@ -525,7 +525,7 @@ pub(crate) fn str_to_c_str(string: &str) -> *const std::os::raw::c_char { } pub(crate) fn naive_date_to_mg_date(input: &NaiveDate) -> *mut bindings::mg_date { - let unix_epoch = NaiveDate::from_ymd(1970, 1, 1).num_days_from_ce(); + let unix_epoch = NaiveDate::from_ymd_opt(1970, 1, 1).unwrap().num_days_from_ce(); unsafe { bindings::mg_date_make((input.num_days_from_ce() - unix_epoch) as i64) } } @@ -540,7 +540,7 @@ pub(crate) fn naive_local_time_to_mg_local_time(input: &NaiveTime) -> *mut bindi pub(crate) fn naive_local_date_time_to_mg_local_date_time( input: &NaiveDateTime, ) -> *mut bindings::mg_local_date_time { - let unix_epoch = NaiveDate::from_ymd(1970, 1, 1).num_days_from_ce(); + let unix_epoch = NaiveDate::from_ymd_opt(1970, 1, 1).unwrap().num_days_from_ce(); let days_s = days_as_seconds((input.num_days_from_ce() - unix_epoch) as i64); let hours_s = hours_as_seconds(input.hour() as i64); let minutes_s = minutes_as_seconds(input.minute() as i64); diff --git a/src/value/tests.rs b/src/value/tests.rs index a93827e..122f717 100644 --- a/src/value/tests.rs +++ b/src/value/tests.rs @@ -249,7 +249,7 @@ fn from_c_mg_value_date1() { let mg_value = unsafe { Value::from_mg_value(c_mg_value) }; assert_eq!( Value::Date( - NaiveDate::from_ymd(1970, 1, 1) + NaiveDate::from_ymd_opt(1970, 1, 1).unwrap() .checked_add_signed(Duration::days(100)) .unwrap() ), @@ -263,7 +263,7 @@ fn from_c_mg_value_date2() { let c_date = bindings::mg_date { days: 365 }; let c_mg_value = unsafe { bindings::mg_value_make_date(bindings::mg_date_copy(&c_date)) }; let mg_value = unsafe { Value::from_mg_value(c_mg_value) }; - assert_eq!(Value::Date(NaiveDate::from_ymd(1971, 1, 1)), mg_value); + assert_eq!(Value::Date(NaiveDate::from_ymd_opt(1971, 1, 1).unwrap()), mg_value); assert_eq!(format!("{}", mg_value), "'1971-01-01'"); } @@ -272,7 +272,7 @@ fn from_c_mg_value_date3() { let c_date = bindings::mg_date { days: -365 }; let c_mg_value = unsafe { bindings::mg_value_make_date(bindings::mg_date_copy(&c_date)) }; let mg_value = unsafe { Value::from_mg_value(c_mg_value) }; - assert_eq!(Value::Date(NaiveDate::from_ymd(1969, 1, 1)), mg_value); + assert_eq!(Value::Date(NaiveDate::from_ymd_opt(1969, 1, 1).unwrap()), mg_value); assert_eq!(format!("{}", mg_value), "'1969-01-01'"); } @@ -285,7 +285,7 @@ fn from_c_mg_value_local_time() { unsafe { bindings::mg_value_make_local_time(bindings::mg_local_time_copy(&c_local_time)) }; let mg_value = unsafe { Value::from_mg_value(c_mg_value) }; assert_eq!( - Value::LocalTime(NaiveTime::from_hms_micro(14, 40, 35, 851241)), + Value::LocalTime(NaiveTime::from_hms_micro_opt(14, 40, 35, 851241).unwrap()), mg_value ); assert_eq!(format!("{}", mg_value), "'14:40:35.851241'"); @@ -304,7 +304,7 @@ fn from_c_mg_value_local_date_time1() { }; let mg_value = unsafe { Value::from_mg_value(c_mg_value) }; assert_eq!( - Value::LocalDateTime(NaiveDate::from_ymd(1971, 5, 16).and_hms_micro(14, 40, 35, 851241)), + Value::LocalDateTime(NaiveDate::from_ymd_opt(1971, 5, 16).unwrap().and_hms_micro_opt(14, 40, 35, 851241).unwrap()), mg_value ); assert_eq!(format!("{}", mg_value), "'1971-05-16 14:40:35.851241'"); @@ -323,7 +323,7 @@ fn from_c_mg_value_local_date_time2() { }; let mg_value = unsafe { Value::from_mg_value(c_mg_value) }; assert_eq!( - Value::LocalDateTime(NaiveDate::from_ymd(1968, 8, 19).and_hms_micro(14, 40, 35, 851241)), + Value::LocalDateTime(NaiveDate::from_ymd_opt(1968, 8, 19).unwrap().and_hms_micro_opt(14, 40, 35, 851241).unwrap()), mg_value ); assert_eq!(format!("{}", mg_value), "'1968-08-19 14:40:35.851241'"); @@ -342,7 +342,7 @@ fn from_c_mg_value_local_date_time3() { }; let mg_value = unsafe { Value::from_mg_value(c_mg_value) }; assert_eq!( - Value::LocalDateTime(NaiveDate::from_ymd(1969, 12, 31).and_hms_micro(23, 59, 59, 0)), + Value::LocalDateTime(NaiveDate::from_ymd_opt(1969, 12, 31).unwrap().and_hms_micro_opt(23, 59, 59, 0).unwrap()), mg_value ); assert_eq!(format!("{}", mg_value), "'1969-12-31 23:59:59'"); @@ -800,7 +800,7 @@ fn from_to_c_mg_value_string() { #[test] fn from_naive_date_param_to_mg_value() { - let query_param = QueryParam::Date(NaiveDate::from_ymd(1971, 1, 1)); + let query_param = QueryParam::Date(NaiveDate::from_ymd_opt(1971, 1, 1).unwrap()); let c_mg_value = unsafe { *(query_param.to_c_mg_value()) }; assert_eq!(c_mg_value.type_, bindings::mg_value_type_MG_VALUE_TYPE_DATE); let mg_value = unsafe { Value::from_mg_value(&c_mg_value) }; @@ -819,7 +819,7 @@ fn from_naive_date_param_to_mg_value() { #[test] fn from_naive_local_time_param_to_mg_value() { - let query_param = QueryParam::LocalTime(NaiveTime::from_hms_nano(2, 3, 4, 1234)); + let query_param = QueryParam::LocalTime(NaiveTime::from_hms_nano_opt(2, 3, 4, 1234).unwrap()); let c_mg_value = unsafe { *(query_param.to_c_mg_value()) }; assert_eq!( c_mg_value.type_, @@ -843,7 +843,7 @@ fn from_naive_local_time_param_to_mg_value() { #[test] fn from_naive_local_date_time_param_to_mg_value() { let query_param = - QueryParam::LocalDateTime(NaiveDate::from_ymd(1960, 1, 1).and_hms_nano(2, 3, 4, 1234)); + QueryParam::LocalDateTime(NaiveDate::from_ymd_opt(1960, 1, 1).unwrap().and_hms_nano_opt(2, 3, 4, 1234).unwrap()); let c_mg_value = unsafe { *(query_param.to_c_mg_value()) }; assert_eq!( c_mg_value.type_, From 62de8ab80f1fb4842f7aa9b1c1836e0ecfc8aedb Mon Sep 17 00:00:00 2001 From: antejavor Date: Mon, 10 Nov 2025 18:58:03 +0100 Subject: [PATCH 2/2] Update format. --- src/value/mod.rs | 18 +++++++++++------- src/value/tests.rs | 42 ++++++++++++++++++++++++++++++++++-------- 2 files changed, 45 insertions(+), 15 deletions(-) diff --git a/src/value/mod.rs b/src/value/mod.rs index f2fadc6..afe8085 100644 --- a/src/value/mod.rs +++ b/src/value/mod.rs @@ -281,10 +281,7 @@ pub(crate) fn mg_value_naive_local_time( let c_nanoseconds = unsafe { bindings::mg_local_time_nanoseconds(c_local_time) }; let seconds = u32::try_from(c_nanoseconds / NSEC_IN_SEC)?; let nanoseconds = u32::try_from(c_nanoseconds % NSEC_IN_SEC)?; - Ok(NaiveTime::from_num_seconds_from_midnight_opt( - seconds, - nanoseconds, - ).unwrap()) + Ok(NaiveTime::from_num_seconds_from_midnight_opt(seconds, nanoseconds).unwrap()) } pub(crate) fn mg_value_naive_local_date_time( @@ -294,7 +291,10 @@ pub(crate) fn mg_value_naive_local_date_time( let c_seconds = unsafe { bindings::mg_local_date_time_seconds(c_local_date_time) }; let c_nanoseconds = unsafe { bindings::mg_local_date_time_nanoseconds(c_local_date_time) }; let nanoseconds = u32::try_from(c_nanoseconds)?; - Ok(Utc.timestamp_opt(c_seconds, nanoseconds).unwrap().naive_utc()) + Ok(Utc + .timestamp_opt(c_seconds, nanoseconds) + .unwrap() + .naive_utc()) } fn mg_value_datetime_zone_id( @@ -525,7 +525,9 @@ pub(crate) fn str_to_c_str(string: &str) -> *const std::os::raw::c_char { } pub(crate) fn naive_date_to_mg_date(input: &NaiveDate) -> *mut bindings::mg_date { - let unix_epoch = NaiveDate::from_ymd_opt(1970, 1, 1).unwrap().num_days_from_ce(); + let unix_epoch = NaiveDate::from_ymd_opt(1970, 1, 1) + .unwrap() + .num_days_from_ce(); unsafe { bindings::mg_date_make((input.num_days_from_ce() - unix_epoch) as i64) } } @@ -540,7 +542,9 @@ pub(crate) fn naive_local_time_to_mg_local_time(input: &NaiveTime) -> *mut bindi pub(crate) fn naive_local_date_time_to_mg_local_date_time( input: &NaiveDateTime, ) -> *mut bindings::mg_local_date_time { - let unix_epoch = NaiveDate::from_ymd_opt(1970, 1, 1).unwrap().num_days_from_ce(); + let unix_epoch = NaiveDate::from_ymd_opt(1970, 1, 1) + .unwrap() + .num_days_from_ce(); let days_s = days_as_seconds((input.num_days_from_ce() - unix_epoch) as i64); let hours_s = hours_as_seconds(input.hour() as i64); let minutes_s = minutes_as_seconds(input.minute() as i64); diff --git a/src/value/tests.rs b/src/value/tests.rs index 122f717..56dee2e 100644 --- a/src/value/tests.rs +++ b/src/value/tests.rs @@ -249,7 +249,8 @@ fn from_c_mg_value_date1() { let mg_value = unsafe { Value::from_mg_value(c_mg_value) }; assert_eq!( Value::Date( - NaiveDate::from_ymd_opt(1970, 1, 1).unwrap() + NaiveDate::from_ymd_opt(1970, 1, 1) + .unwrap() .checked_add_signed(Duration::days(100)) .unwrap() ), @@ -263,7 +264,10 @@ fn from_c_mg_value_date2() { let c_date = bindings::mg_date { days: 365 }; let c_mg_value = unsafe { bindings::mg_value_make_date(bindings::mg_date_copy(&c_date)) }; let mg_value = unsafe { Value::from_mg_value(c_mg_value) }; - assert_eq!(Value::Date(NaiveDate::from_ymd_opt(1971, 1, 1).unwrap()), mg_value); + assert_eq!( + Value::Date(NaiveDate::from_ymd_opt(1971, 1, 1).unwrap()), + mg_value + ); assert_eq!(format!("{}", mg_value), "'1971-01-01'"); } @@ -272,7 +276,10 @@ fn from_c_mg_value_date3() { let c_date = bindings::mg_date { days: -365 }; let c_mg_value = unsafe { bindings::mg_value_make_date(bindings::mg_date_copy(&c_date)) }; let mg_value = unsafe { Value::from_mg_value(c_mg_value) }; - assert_eq!(Value::Date(NaiveDate::from_ymd_opt(1969, 1, 1).unwrap()), mg_value); + assert_eq!( + Value::Date(NaiveDate::from_ymd_opt(1969, 1, 1).unwrap()), + mg_value + ); assert_eq!(format!("{}", mg_value), "'1969-01-01'"); } @@ -304,7 +311,12 @@ fn from_c_mg_value_local_date_time1() { }; let mg_value = unsafe { Value::from_mg_value(c_mg_value) }; assert_eq!( - Value::LocalDateTime(NaiveDate::from_ymd_opt(1971, 5, 16).unwrap().and_hms_micro_opt(14, 40, 35, 851241).unwrap()), + Value::LocalDateTime( + NaiveDate::from_ymd_opt(1971, 5, 16) + .unwrap() + .and_hms_micro_opt(14, 40, 35, 851241) + .unwrap() + ), mg_value ); assert_eq!(format!("{}", mg_value), "'1971-05-16 14:40:35.851241'"); @@ -323,7 +335,12 @@ fn from_c_mg_value_local_date_time2() { }; let mg_value = unsafe { Value::from_mg_value(c_mg_value) }; assert_eq!( - Value::LocalDateTime(NaiveDate::from_ymd_opt(1968, 8, 19).unwrap().and_hms_micro_opt(14, 40, 35, 851241).unwrap()), + Value::LocalDateTime( + NaiveDate::from_ymd_opt(1968, 8, 19) + .unwrap() + .and_hms_micro_opt(14, 40, 35, 851241) + .unwrap() + ), mg_value ); assert_eq!(format!("{}", mg_value), "'1968-08-19 14:40:35.851241'"); @@ -342,7 +359,12 @@ fn from_c_mg_value_local_date_time3() { }; let mg_value = unsafe { Value::from_mg_value(c_mg_value) }; assert_eq!( - Value::LocalDateTime(NaiveDate::from_ymd_opt(1969, 12, 31).unwrap().and_hms_micro_opt(23, 59, 59, 0).unwrap()), + Value::LocalDateTime( + NaiveDate::from_ymd_opt(1969, 12, 31) + .unwrap() + .and_hms_micro_opt(23, 59, 59, 0) + .unwrap() + ), mg_value ); assert_eq!(format!("{}", mg_value), "'1969-12-31 23:59:59'"); @@ -842,8 +864,12 @@ fn from_naive_local_time_param_to_mg_value() { #[test] fn from_naive_local_date_time_param_to_mg_value() { - let query_param = - QueryParam::LocalDateTime(NaiveDate::from_ymd_opt(1960, 1, 1).unwrap().and_hms_nano_opt(2, 3, 4, 1234).unwrap()); + let query_param = QueryParam::LocalDateTime( + NaiveDate::from_ymd_opt(1960, 1, 1) + .unwrap() + .and_hms_nano_opt(2, 3, 4, 1234) + .unwrap(), + ); let c_mg_value = unsafe { *(query_param.to_c_mg_value()) }; assert_eq!( c_mg_value.type_,