diff --git a/src/extjson/models.rs b/src/extjson/models.rs index b726aa41..297b47d6 100644 --- a/src/extjson/models.rs +++ b/src/extjson/models.rs @@ -256,6 +256,7 @@ pub(crate) struct DateTime { pub(crate) enum DateTimeBody { Canonical(Int64), Relaxed(String), + Legacy(i64), } impl DateTimeBody { @@ -282,6 +283,7 @@ impl DateTime { })?; Ok(datetime) } + DateTimeBody::Legacy(ms) => Ok(crate::DateTime::from_millis(ms)), } } } diff --git a/src/tests/serde.rs b/src/tests/serde.rs index 595cc312..cb49f9d1 100644 --- a/src/tests/serde.rs +++ b/src/tests/serde.rs @@ -665,6 +665,19 @@ fn test_de_uuid_extjson_string() { assert_eq!(actual_uuid_bson, expected_uuid_bson); } +#[test] +fn test_de_date_extjson_number() { + let _guard = LOCK.run_concurrently(); + + let ext_json_canonical = r#"{ "$date": { "$numberLong": "1136239445000" } }"#; + let expected_date_bson: Bson = serde_json::from_str(ext_json_canonical).unwrap(); + + let ext_json_legacy_java = r#"{ "$date": 1136239445000 }"#; + let actual_date_bson: Bson = serde_json::from_str(ext_json_legacy_java).unwrap(); + + assert_eq!(actual_date_bson, expected_date_bson); +} + #[test] fn test_de_oid_string() { let _guard = LOCK.run_concurrently();