Implement the outstanding type casts for serde_json.
This commit is contained in:
parent
021a7bd739
commit
c300d18a75
67
src/bin.rs
67
src/bin.rs
@ -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), "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") => 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), "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…
x
Reference in New Issue
Block a user