Skip to content

Commit 10c850a

Browse files
committed
Change int serializer to use unsigned ints when possible
1 parent 0f12623 commit 10c850a

File tree

1 file changed

+10
-0
lines changed

1 file changed

+10
-0
lines changed

proto/src/bin.rs

+10
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ macro_rules! impl_conversion {
2525
#[serde(untagged)]
2626
pub enum NTValue {
2727
/// An integer value. This value stores both signed and unsigned integers in an `i64`
28+
#[serde(serialize_with = "integer_serializer")]
2829
Int(i64),
2930
Float(f32),
3031
/// A floating-point value. This value represents both single and double precision floats, and is stored in an `f64`
@@ -49,6 +50,15 @@ pub enum NTValue {
4950
StringArray(Vec<String>),
5051
}
5152

53+
pub fn integer_serializer<S: serde::Serializer>(i: &i64, s: S) -> Result<S::Ok, S::Error> {
54+
let i = *i;
55+
if i > 0 {
56+
s.serialize_u64(i as u64)
57+
} else {
58+
s.serialize_i64(i)
59+
}
60+
}
61+
5262
fn raw_serializer<S: serde::Serializer>(v: &Vec<u8>, s: S) -> Result<S::Ok, S::Error> {
5363
s.serialize_bytes(&v[..])
5464
}

0 commit comments

Comments
 (0)