1use serde::de::{Deserializer, Visitor};
2use std::fmt;
3
4struct BoolVisitor;
5
6impl<'de> Visitor<'de> for BoolVisitor {
7 type Value = bool;
8
9 fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
10 formatter.write_str("'t' or 'f'")
11 }
12
13 fn visit_str<E>(self, string: &str) -> Result<Self::Value, E>
14 where
15 E: serde::de::Error,
16 {
17 if string == "t" {
18 Ok(true)
19 } else if string == "f" {
20 Ok(false)
21 } else {
22 Err(serde::de::Error::unknown_variant(string, &["t", "f"]))
23 }
24 }
25}
26
27pub(crate) fn de<'de, D>(deserializer: D) -> Result<bool, D::Error>
28where
29 D: Deserializer<'de>,
30{
31 deserializer.deserialize_str(BoolVisitor)
32}