diff --git a/src/atom/mod.rs b/src/atom/mod.rs index f5884bc..07ccd0f 100644 --- a/src/atom/mod.rs +++ b/src/atom/mod.rs @@ -63,7 +63,7 @@ pub struct SlotName(#[get(method = "name")] String); #[derive(Clone, Debug, PartialEq, Eq, Get)] pub struct Slot { - slot: SlotName, + slot: Option, sub: Option, operator: Option, } diff --git a/src/atom/parsers.rs b/src/atom/parsers.rs index 4bc27ce..65cce04 100644 --- a/src/atom/parsers.rs +++ b/src/atom/parsers.rs @@ -112,7 +112,7 @@ pub fn slotname<'a>() -> impl Parser<&'a str, Output = SlotName> { } pub fn slot<'a>() -> impl Parser<&'a str, Output = Slot> { - slotname() + opt(slotname()) .and(opt(slotname().preceded_by(tag("/")))) .and(opt(slot_operator())) .map(|((slot, sub), operator)| Slot { @@ -273,4 +273,11 @@ mod test { assert!(atom().check_finished(it).is_err()) } + + #[test] + fn test_empty_slot() { + let it = InputIter::new("foo/bar-1.0.0:="); + + atom().check_finished(it).unwrap(); + } }