Skip to content

Commit ba0ffda

Browse files
committed
Comply with JSONRPC "Hex value encoding"
Fix #38
1 parent 4f90210 commit ba0ffda

1 file changed

Lines changed: 28 additions & 1 deletion

File tree

src/rpc/serialize.rs

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,12 @@ impl<T: LowerHex> Serialize for Hex<T> {
1313
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
1414
where S: Serializer
1515
{
16-
serializer.serialize_str(&format!("0x{:x}", self.0))
16+
let value = format!("0x{:x}", self.0);
17+
if &value == "0x" {
18+
serializer.serialize_str("0x0")
19+
} else {
20+
serializer.serialize_str(&value)
21+
}
1722
}
1823
}
1924

@@ -82,3 +87,25 @@ impl<'de> Deserialize<'de> for Bytes {
8287
deserializer.deserialize_str(BytesVisitor)
8388
}
8489
}
90+
91+
#[cfg(test)]
92+
mod tests {
93+
use super::*;
94+
use bigint::*;
95+
use serde_json;
96+
97+
#[test]
98+
fn hex_single_digit() {
99+
assert_eq!("\"0x1\"", serde_json::to_string(&Hex(U256::one())).unwrap());
100+
}
101+
102+
#[test]
103+
fn hex_zero() {
104+
assert_eq!("\"0x0\"", serde_json::to_string(&Hex(U256::zero())).unwrap());
105+
}
106+
107+
#[test]
108+
fn bytes_single_digit() {
109+
assert_eq!("\"0x01\"", serde_json::to_string(&Bytes(vec![1])).unwrap());
110+
}
111+
}

0 commit comments

Comments
 (0)