copr: fix wrong json opaque serialization
close tikv/tikv#13391
@@ -115,7 +115,11 @@ impl<'a> Serialize for JsonRef<'a> {
.get_opaque_type()
.map_err(|_| SerError::custom("invalid opaque type code"))?;
- let str = format!("base64:type{}:{}", typ, base64::encode(bytes));
+ let str = format!(
+ "base64:type{}:{}",
+ typ.to_u8().unwrap(),
+ base64::encode(bytes)
+ );
serializer.serialize_str(&str)
}
}
@@ -227,6 +231,7 @@ impl<'de> Deserialize<'de> for Json {
#[cfg(test)]
mod tests {
use super::*;
+ use crate::FieldTypeTp;
#[test]
fn test_from_str_for_object() {
@@ -276,4 +281,40 @@ mod tests {
resp.unwrap_err();
}
}
+
+ #[test]
+ fn test_to_str() {
+ let legal_cases = vec![
+ (
+ Json::from_kv_pairs(vec![(
+ b"key",
+ Json::from_str_val("value").unwrap().as_ref(),
+ )])
+ .unwrap(),
+ r#"{"key": "value"}"#,
+ ),
+ (
+ Json::from_array(vec![
+ Json::from_str_val("d1").unwrap(),
+ Json::from_str_val("d2").unwrap(),
+ ])
+ .unwrap(),
+ r#"["d1", "d2"]"#,
+ ),
+ (Json::from_i64(-3).unwrap(), r#"-3"#),
+ (Json::from_i64(3).unwrap(), r#"3"#),
+ (Json::from_f64(3.0).unwrap(), r#"3.0"#),
+ (Json::none().unwrap(), r#"null"#),
+ (Json::from_bool(true).unwrap(), r#"true"#),
+ (Json::from_bool(false).unwrap(), r#"false"#),
+ (
+ Json::from_opaque(FieldTypeTp::VarString, &[0xAB, 0xCD]).unwrap(),
+ r#""base64:type253:q80=""#,
+ ),
+ ];
+
+ for (json, json_str) in legal_cases {
+ assert_eq!(json.to_string(), json_str);
+ }
+ }
}
