mirror of
https://git.asonix.dog/asonix/relay.git
synced 2024-11-22 09:31:07 +00:00
Add boolish to nodinfo, add tests
This commit is contained in:
parent
a4cb7934b1
commit
e46c9e230b
3 changed files with 84 additions and 56 deletions
File diff suppressed because one or more lines are too long
|
@ -138,3 +138,59 @@ impl JobServer {
|
||||||
.map_err(Into::into)
|
.map_err(Into::into)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct Boolish {
|
||||||
|
inner: bool,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl std::ops::Deref for Boolish {
|
||||||
|
type Target = bool;
|
||||||
|
|
||||||
|
fn deref(&self) -> &Self::Target {
|
||||||
|
&self.inner
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'de> serde::Deserialize<'de> for Boolish {
|
||||||
|
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
|
||||||
|
where
|
||||||
|
D: serde::Deserializer<'de>,
|
||||||
|
{
|
||||||
|
#[derive(serde::Deserialize)]
|
||||||
|
#[serde(untagged)]
|
||||||
|
enum BoolThing {
|
||||||
|
Bool(bool),
|
||||||
|
String(String),
|
||||||
|
}
|
||||||
|
|
||||||
|
let thing: BoolThing = serde::Deserialize::deserialize(deserializer)?;
|
||||||
|
|
||||||
|
match thing {
|
||||||
|
BoolThing::Bool(inner) => Ok(Boolish { inner }),
|
||||||
|
BoolThing::String(s) if s.to_lowercase() == "false" => Ok(Boolish { inner: false }),
|
||||||
|
BoolThing::String(_) => Ok(Boolish { inner: true }),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::Boolish;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn boolish_works() {
|
||||||
|
const CASES: &[(&str, bool)] = &[
|
||||||
|
("false", false),
|
||||||
|
("\"false\"", false),
|
||||||
|
("\"FALSE\"", false),
|
||||||
|
("true", true),
|
||||||
|
("\"true\"", true),
|
||||||
|
("\"anything else\"", true),
|
||||||
|
];
|
||||||
|
|
||||||
|
for (case, output) in CASES {
|
||||||
|
let b: Boolish = serde_json::from_str(case).unwrap();
|
||||||
|
assert_eq!(*b, *output);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
File diff suppressed because one or more lines are too long
Loading…
Reference in a new issue