You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@avro.apache.org by kr...@apache.org on 2026/01/31 09:42:46 UTC

(avro-rs) branch fix/value_to_value created (now 6408528)

This is an automated email from the ASF dual-hosted git repository.

kriskras99 pushed a change to branch fix/value_to_value
in repository https://gitbox.apache.org/repos/asf/avro-rs.git


      at 6408528  fix: Don't silently truncate numbers larger than `i64::MAX` when converting from JSON

This branch includes the following new commits:

     new 6408528  fix: Don't silently truncate numbers larger than `i64::MAX` when converting from JSON

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



(avro-rs) 01/01: fix: Don't silently truncate numbers larger than `i64::MAX` when converting from JSON

Posted by kr...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

kriskras99 pushed a commit to branch fix/value_to_value
in repository https://gitbox.apache.org/repos/asf/avro-rs.git

commit 64085281bf67cbe87aa42f1599acb12067f66cdf
Author: Kriskras99 <gi...@kriskras99.nl>
AuthorDate: Sat Jan 31 10:42:35 2026 +0100

    fix: Don't silently truncate numbers larger than `i64::MAX` when converting from JSON
---
 avro/src/types.rs | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/avro/src/types.rs b/avro/src/types.rs
index 0060987..9e4af89 100644
--- a/avro/src/types.rs
+++ b/avro/src/types.rs
@@ -145,7 +145,7 @@ to_value!(f32, Value::Float);
 to_value!(f64, Value::Double);
 to_value!(String, Value::String);
 to_value!(Vec<u8>, Value::Bytes);
-to_value!(uuid::Uuid, Value::Uuid);
+to_value!(Uuid, Value::Uuid);
 to_value!(Decimal, Value::Decimal);
 to_value!(BigDecimal, Value::BigDecimal);
 to_value!(Duration, Value::Duration);
@@ -283,7 +283,7 @@ impl From<JsonValue> for Value {
                 }
             }
             JsonValue::Number(ref n) if n.is_f64() => Value::Double(n.as_f64().unwrap()),
-            JsonValue::Number(n) => Value::Long(n.as_u64().unwrap() as i64), // TODO: Not so great
+            JsonValue::Number(n) => panic!("{n:?} does not fit into an Avro long"),
             JsonValue::String(s) => s.into(),
             JsonValue::Array(items) => Value::Array(items.into_iter().map(Value::from).collect()),
             JsonValue::Object(items) => Value::Map(
@@ -3240,7 +3240,6 @@ Field with name '"b"' is not a member of the map items"#,
         assert_eq!(Value::from(json!(1.23)), Value::Double(1.23));
         assert_eq!(Value::from(json!(-1.23)), Value::Double(-1.23));
         assert_eq!(Value::from(json!(u64::MIN)), Value::Int(u64::MIN as i32));
-        assert_eq!(Value::from(json!(u64::MAX)), Value::Long(u64::MAX as i64));
         assert_eq!(
             Value::from(json!("some text")),
             Value::String("some text".into())
@@ -3500,4 +3499,10 @@ Field with name '"b"' is not a member of the map items"#,
             Details::ZagI32(_, _)
         ));
     }
+
+    #[test]
+    #[should_panic(expected = "Number(18446744073709551615) does not fit into an Avro long")]
+    fn avro_rs_xxx_serde_json_number_u64_max() {
+        let _ = Value::from(json!(u64::MAX));
+    }
 }