remove RPC parameter leniency now that mist formats correctly (#6651)
This commit is contained in:
parent
df39f5e7fc
commit
a2d9b6f9ce
@ -82,9 +82,7 @@ impl<'a> Visitor<'a> for BlockNumberVisitor {
|
|||||||
_ if value.starts_with("0x") => u64::from_str_radix(&value[2..], 16).map(BlockNumber::Num).map_err(|e| {
|
_ if value.starts_with("0x") => u64::from_str_radix(&value[2..], 16).map(BlockNumber::Num).map_err(|e| {
|
||||||
Error::custom(format!("Invalid block number: {}", e))
|
Error::custom(format!("Invalid block number: {}", e))
|
||||||
}),
|
}),
|
||||||
_ => value.parse::<u64>().map(BlockNumber::Num).map_err(|e| {
|
_ => Err(Error::custom(format!("Invalid block number: missing 0x prefix"))),
|
||||||
Error::custom(format!("Invalid block number: {}", e))
|
|
||||||
}),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -112,9 +110,15 @@ mod tests {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn block_number_deserialization() {
|
fn block_number_deserialization() {
|
||||||
let s = r#"["0xa", "10", "latest", "earliest", "pending"]"#;
|
let s = r#"["0xa", "latest", "earliest", "pending"]"#;
|
||||||
let deserialized: Vec<BlockNumber> = serde_json::from_str(s).unwrap();
|
let deserialized: Vec<BlockNumber> = serde_json::from_str(s).unwrap();
|
||||||
assert_eq!(deserialized, vec![BlockNumber::Num(10), BlockNumber::Num(10), BlockNumber::Latest, BlockNumber::Earliest, BlockNumber::Pending])
|
assert_eq!(deserialized, vec![BlockNumber::Num(10), BlockNumber::Latest, BlockNumber::Earliest, BlockNumber::Pending])
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn should_not_deserialize_decimal() {
|
||||||
|
let s = r#""10""#;
|
||||||
|
assert!(serde_json::from_str::<BlockNumber>(s).is_err());
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
@ -74,13 +74,7 @@ impl<'a> Visitor<'a> for BytesVisitor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn visit_str<E>(self, value: &str) -> Result<Self::Value, E> where E: Error {
|
fn visit_str<E>(self, value: &str) -> Result<Self::Value, E> where E: Error {
|
||||||
if value.is_empty() {
|
if value.len() >= 2 && &value[0..2] == "0x" && value.len() & 1 == 0 {
|
||||||
warn!(
|
|
||||||
target: "deprecated",
|
|
||||||
"Deserializing empty string as empty bytes. This is a non-standard behaviour that will be removed in future versions. Please update your code to send `0x` instead!"
|
|
||||||
);
|
|
||||||
Ok(Bytes::new(Vec::new()))
|
|
||||||
} else if value.len() >= 2 && &value[0..2] == "0x" && value.len() & 1 == 0 {
|
|
||||||
Ok(Bytes::new(FromHex::from_hex(&value[2..]).map_err(|e| Error::custom(format!("Invalid hex: {}", e)))?))
|
Ok(Bytes::new(FromHex::from_hex(&value[2..]).map_err(|e| Error::custom(format!("Invalid hex: {}", e)))?))
|
||||||
} else {
|
} else {
|
||||||
Err(Error::custom("Invalid bytes format. Expected a 0x-prefixed hex string with even length"))
|
Err(Error::custom("Invalid bytes format. Expected a 0x-prefixed hex string with even length"))
|
||||||
@ -108,8 +102,7 @@ mod tests {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_bytes_deserialize() {
|
fn test_bytes_deserialize() {
|
||||||
// TODO [ToDr] Uncomment when Mist starts sending correct data
|
let bytes1: Result<Bytes, serde_json::Error> = serde_json::from_str(r#""""#);
|
||||||
// let bytes1: Result<Bytes, serde_json::Error> = serde_json::from_str(r#""""#);
|
|
||||||
let bytes2: Result<Bytes, serde_json::Error> = serde_json::from_str(r#""0x123""#);
|
let bytes2: Result<Bytes, serde_json::Error> = serde_json::from_str(r#""0x123""#);
|
||||||
let bytes3: Result<Bytes, serde_json::Error> = serde_json::from_str(r#""0xgg""#);
|
let bytes3: Result<Bytes, serde_json::Error> = serde_json::from_str(r#""0xgg""#);
|
||||||
|
|
||||||
@ -117,19 +110,12 @@ mod tests {
|
|||||||
let bytes5: Bytes = serde_json::from_str(r#""0x12""#).unwrap();
|
let bytes5: Bytes = serde_json::from_str(r#""0x12""#).unwrap();
|
||||||
let bytes6: Bytes = serde_json::from_str(r#""0x0123""#).unwrap();
|
let bytes6: Bytes = serde_json::from_str(r#""0x0123""#).unwrap();
|
||||||
|
|
||||||
// assert!(bytes1.is_err());
|
assert!(bytes1.is_err());
|
||||||
assert!(bytes2.is_err());
|
assert!(bytes2.is_err());
|
||||||
assert!(bytes3.is_err());
|
assert!(bytes3.is_err());
|
||||||
assert_eq!(bytes4, Bytes(vec![]));
|
assert_eq!(bytes4, Bytes(vec![]));
|
||||||
assert_eq!(bytes5, Bytes(vec![0x12]));
|
assert_eq!(bytes5, Bytes(vec![0x12]));
|
||||||
assert_eq!(bytes6, Bytes(vec![0x1, 0x23]));
|
assert_eq!(bytes6, Bytes(vec![0x1, 0x23]));
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO [ToDr] Remove when Mist starts sending correct data
|
|
||||||
#[test]
|
|
||||||
fn test_bytes_lenient_against_the_spec_deserialize_for_empty_string_for_mist_compatibility() {
|
|
||||||
let deserialized: Bytes = serde_json::from_str(r#""""#).unwrap();
|
|
||||||
assert_eq!(deserialized, Bytes(Vec::new()));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user