mirror of
https://github.com/ankitects/anki.git
synced 2025-09-19 06:22: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,
|
||||
#[serde(default)]
|
||||
pub(crate) bafmt: String,
|
||||
#[serde(deserialize_with = "default_on_invalid")]
|
||||
#[serde(deserialize_with = "default_on_invalid", default)]
|
||||
pub(crate) did: Option<DeckID>,
|
||||
#[serde(default, deserialize_with = "default_on_invalid")]
|
||||
pub(crate) bfont: String,
|
||||
|
|
|
@ -8,6 +8,8 @@ pub(crate) use serde_aux::field_attributes::{
|
|||
};
|
||||
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>
|
||||
where
|
||||
T: Default + DeTrait<'de>,
|
||||
|
@ -63,3 +65,31 @@ impl FromI64 for TimestampSecs {
|
|||
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