|
|
|
@ -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"),
|
|
|
|
|
}
|
|
|
|
|