Implement the outstanding type casts for serde_json.

master
Tom Alexander 4 years ago
parent 021a7bd739
commit c300d18a75
Signed by: talexander
GPG Key ID: D3A179C9A53C0EDE

@ -355,24 +355,63 @@ impl Castable for serde_json::Value {
})
.ok(),
(serde_json::Value::Number(_), "number") => Some(IceResult::from_borrowed(self)),
(serde_json::Value::Null, "number") => None,
(serde_json::Value::Bool(_), "number") => None,
(serde_json::Value::Null, "number") => {
Some(IceResult::from_owned(serde_json::Value::Number(0.into())))
}
(serde_json::Value::Bool(boolean), "number") => {
if *boolean {
Some(IceResult::from_owned(serde_json::Value::Number(1.into())))
} else {
Some(IceResult::from_owned(serde_json::Value::Number(0.into())))
}
}
(serde_json::Value::Array(_), "number") => None,
(serde_json::Value::Object(_), "number") => None,
(serde_json::Value::String(text), "string") => todo!(),
(serde_json::Value::Number(_), "string") => todo!(),
(serde_json::Value::Null, "string") => todo!(),
(serde_json::Value::Bool(_), "string") => todo!(),
(serde_json::Value::Array(_), "string") => todo!(),
(serde_json::Value::Object(_), "string") => todo!(),
(serde_json::Value::String(text), "boolean") => todo!(),
(serde_json::Value::Number(_), "boolean") => todo!(),
(serde_json::Value::Null, "boolean") => todo!(),
(serde_json::Value::Bool(_), "boolean") => todo!(),
(serde_json::Value::Array(_), "boolean") => todo!(),
(serde_json::Value::Object(_), "boolean") => todo!(),
(serde_json::Value::String(text), "string") => Some(IceResult::from_borrowed(self)),
(serde_json::Value::Number(num), "string") => Some(IceResult::from_owned(
serde_json::Value::String(num.to_string()),
)),
(serde_json::Value::Null, "string") => Some(IceResult::from_owned(
serde_json::Value::String("null".to_owned()),
)),
(serde_json::Value::Bool(boolean), "string") => Some(IceResult::from_owned(
serde_json::Value::String(boolean.to_string()),
)),
(serde_json::Value::Array(_), "string") => Some(IceResult::from_owned(
serde_json::Value::String(self.render(&Vec::new()).unwrap_or("".to_owned())),
)),
(serde_json::Value::Object(_), "string") => Some(IceResult::from_owned(
serde_json::Value::String(self.render(&Vec::new()).unwrap_or("".to_owned())),
)),
(serde_json::Value::String(text), "boolean") => {
if text.is_empty() {
Some(IceResult::from_owned(serde_json::Value::Bool(false)))
} else {
Some(IceResult::from_owned(serde_json::Value::Bool(true)))
}
}
(serde_json::Value::Number(json_num), "boolean") => {
Some(IceResult::from_owned(serde_json::Value::Bool(
match (json_num.as_u64(), json_num.as_i64(), json_num.as_f64()) {
(Some(num), _, _) => num != 0,
(_, Some(num), _) => num != 0,
(_, _, Some(num)) => num != 0.0 && !num.is_nan(),
_ => false,
},
)))
}
(serde_json::Value::Null, "boolean") => {
Some(IceResult::from_owned(serde_json::Value::Bool(false)))
}
(serde_json::Value::Bool(_), "boolean") => Some(IceResult::from_borrowed(self)),
(serde_json::Value::Array(_), "boolean") => {
Some(IceResult::from_owned(serde_json::Value::Bool(true)))
}
(serde_json::Value::Object(_), "boolean") => {
Some(IceResult::from_owned(serde_json::Value::Bool(true)))
}
(_, _) => panic!("Unimplemented cast"),
}

Loading…
Cancel
Save