pub mod ooxml_bool {
use serde::{self, Deserialize, Deserializer, Serializer};
pub fn serialize<S>(value: &Option<bool>, serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
match value {
Some(true) => serializer.serialize_str("1"),
Some(false) => serializer.serialize_str("0"),
None => serializer.serialize_none(),
}
}
pub fn deserialize<'de, D>(deserializer: D) -> Result<Option<bool>, D::Error>
where
D: Deserializer<'de>,
{
let opt: Option<String> = Option::deserialize(deserializer)?;
match opt.as_deref() {
Some("1") | Some("true") => Ok(Some(true)),
Some("0") | Some("false") => Ok(Some(false)),
Some(other) => Err(serde::de::Error::custom(format!(
"expected boolean value (1/0/true/false), got '{}'",
other
))),
None => Ok(None),
}
}
}
pub mod ooxml_bool_required {
use serde::{self, Deserialize, Deserializer, Serializer};
pub fn serialize<S>(value: &bool, serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
if *value {
serializer.serialize_str("1")
} else {
serializer.serialize_str("0")
}
}
pub fn deserialize<'de, D>(deserializer: D) -> Result<bool, D::Error>
where
D: Deserializer<'de>,
{
let s = String::deserialize(deserializer)?;
match s.as_str() {
"1" | "true" => Ok(true),
"0" | "false" => Ok(false),
other => Err(serde::de::Error::custom(format!(
"expected boolean value (1/0/true/false), got '{}'",
other
))),
}
}
}