allow Cpv type to have a slot

This commit is contained in:
John Turner
2025-11-13 19:57:28 +00:00
parent 0448a52926
commit 36bdbbd8bc
2 changed files with 18 additions and 2 deletions

View File

@@ -119,6 +119,7 @@ pub struct Cpv {
category: Category, category: Category,
name: Name, name: Name,
version: Version, version: Version,
slot: Option<Slot>,
} }
#[derive(Clone, Debug, Get, PartialEq, Eq)] #[derive(Clone, Debug, Get, PartialEq, Eq)]
@@ -572,7 +573,13 @@ impl fmt::Display for Cp {
impl fmt::Display for Cpv { impl fmt::Display for Cpv {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{}/{}-{}", &self.category, &self.name, &self.version) write!(f, "{}/{}-{}", &self.category, &self.name, &self.version)?;
if let Some(slot) = self.slot.as_ref() {
write!(f, ":{slot}")?;
}
Ok(())
} }
} }

View File

@@ -351,10 +351,12 @@ impl<'a> Parseable<'a, &'a str> for Cpv {
Category::parser() Category::parser()
.and(Name::parser().preceded_by(tag("/"))) .and(Name::parser().preceded_by(tag("/")))
.and(Version::parser().preceded_by(tag("-"))) .and(Version::parser().preceded_by(tag("-")))
.map(|((category, name), version)| Cpv { .and(Slot::parser().preceded_by(tag(":")).opt())
.map(|(((category, name), version), slot)| Cpv {
category, category,
name, name,
version, version,
slot,
}) })
} }
} }
@@ -479,4 +481,11 @@ mod test {
Atom::parser().check_finished(it).unwrap(); Atom::parser().check_finished(it).unwrap();
} }
#[test]
fn test_cpv_with_slot() {
let it = InputIter::new("foo/bar-1.0:slot/sub=");
Cpv::parser().check_finished(it).unwrap();
}
} }