don't crash when card:0 passed in

This commit is contained in:
Damien Elmes 2020-03-21 07:56:55 +10:00
parent 124357bd82
commit c3314d3689

View file

@ -373,7 +373,7 @@ fn parse_prop(val: &str) -> ParseResult<SearchNode<'static>> {
fn parse_template(val: &str) -> SearchNode<'static> {
SearchNode::CardTemplate(match val.parse::<u16>() {
Ok(n) => TemplateKind::Ordinal(n),
Ok(n) => TemplateKind::Ordinal(n.max(1) - 1),
Err(_) => TemplateKind::Name(val.into()),
})
}
@ -425,7 +425,12 @@ mod test {
);
assert_eq!(
parse("card:3")?,
vec![Search(CardTemplate(TemplateKind::Ordinal(3)))]
vec![Search(CardTemplate(TemplateKind::Ordinal(2)))]
);
// 0 must not cause a crash due to underflow
assert_eq!(
parse("card:0")?,
vec![Search(CardTemplate(TemplateKind::Ordinal(0)))]
);
assert_eq!(parse("deck:default")?, vec![Search(Deck("default".into()))]);
assert_eq!(parse("note:basic")?, vec![Search(NoteType("basic".into()))]);