mirror of
https://github.com/ankitects/anki.git
synced 2025-09-19 14:32:22 -04:00
handle missing deck ID in templates
https://github.com/ankidroid/Anki-Android/issues/7512
This commit is contained in:
parent
ef9f6b022b
commit
d70132cc8b
2 changed files with 31 additions and 1 deletions
|
@ -264,7 +264,7 @@ pub struct CardTemplateSchema11 {
|
||||||
pub(crate) bqfmt: String,
|
pub(crate) bqfmt: String,
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
pub(crate) bafmt: String,
|
pub(crate) bafmt: String,
|
||||||
#[serde(deserialize_with = "default_on_invalid")]
|
#[serde(deserialize_with = "default_on_invalid", default)]
|
||||||
pub(crate) did: Option<DeckID>,
|
pub(crate) did: Option<DeckID>,
|
||||||
#[serde(default, deserialize_with = "default_on_invalid")]
|
#[serde(default, deserialize_with = "default_on_invalid")]
|
||||||
pub(crate) bfont: String,
|
pub(crate) bfont: String,
|
||||||
|
|
|
@ -8,6 +8,8 @@ pub(crate) use serde_aux::field_attributes::{
|
||||||
};
|
};
|
||||||
use serde_json::Value;
|
use serde_json::Value;
|
||||||
|
|
||||||
|
/// Note: if you wish to cover the case where a field is missing, make sure you also
|
||||||
|
/// use the `serde(default)` flag.
|
||||||
pub(crate) fn default_on_invalid<'de, T, D>(deserializer: D) -> Result<T, D::Error>
|
pub(crate) fn default_on_invalid<'de, T, D>(deserializer: D) -> Result<T, D::Error>
|
||||||
where
|
where
|
||||||
T: Default + DeTrait<'de>,
|
T: Default + DeTrait<'de>,
|
||||||
|
@ -63,3 +65,31 @@ impl FromI64 for TimestampSecs {
|
||||||
TimestampSecs(val as i64)
|
TimestampSecs(val as i64)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod test {
|
||||||
|
use super::*;
|
||||||
|
use serde::Deserialize;
|
||||||
|
|
||||||
|
#[derive(Deserialize, Debug, PartialEq)]
|
||||||
|
struct MaybeInvalid {
|
||||||
|
#[serde(deserialize_with = "default_on_invalid", default)]
|
||||||
|
field: Option<usize>,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn invalid_or_missing() {
|
||||||
|
assert_eq!(
|
||||||
|
serde_json::from_str::<MaybeInvalid>(r#"{"field": 5}"#).unwrap(),
|
||||||
|
MaybeInvalid { field: Some(5) }
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
serde_json::from_str::<MaybeInvalid>(r#"{"field": "5"}"#).unwrap(),
|
||||||
|
MaybeInvalid { field: None }
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
serde_json::from_str::<MaybeInvalid>(r#"{"another": 5}"#).unwrap(),
|
||||||
|
MaybeInvalid { field: None }
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue