impl Cp type

This commit is contained in:
John Turner
2025-11-13 19:49:22 +00:00
parent 874be77aa4
commit 0448a52926
2 changed files with 25 additions and 3 deletions

View File

@@ -108,6 +108,12 @@ pub struct UseDep {
condition: Option<UseDepCondition>,
}
#[derive(Clone, Debug, PartialEq, Eq, Get)]
pub struct Cp {
category: Category,
name: Name,
}
#[derive(Clone, Debug, PartialEq, Eq, Get)]
pub struct Cpv {
category: Category,
@@ -558,6 +564,12 @@ impl fmt::Display for UseDep {
}
}
impl fmt::Display for Cp {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{}/{}", &self.category, &self.name)
}
}
impl fmt::Display for Cpv {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{}/{}-{}", &self.category, &self.name, &self.version)

View File

@@ -5,9 +5,9 @@ use mon::{Parser, ParserIter, r#if, numeric1, one_of, tag};
use crate::{
Parseable,
atom::{
Atom, Blocker, Category, Cpv, Name, Slot, SlotName, SlotOperator, UseDep, UseDepCondition,
UseDepNegate, UseDepSign, Version, VersionNumber, VersionNumbers, VersionOperator,
VersionSuffix, VersionSuffixKind, VersionSuffixes,
Atom, Blocker, Category, Cp, Cpv, Name, Slot, SlotName, SlotOperator, UseDep,
UseDepCondition, UseDepNegate, UseDepSign, Version, VersionNumber, VersionNumbers,
VersionOperator, VersionSuffix, VersionSuffixKind, VersionSuffixes,
},
useflag::UseFlag,
};
@@ -334,6 +334,16 @@ impl<'a> Parseable<'a, &'a str> for Atom {
}
}
impl<'a> Parseable<'a, &'a str> for Cp {
type Parser = impl Parser<&'a str, Output = Self>;
fn parser() -> Self::Parser {
Category::parser()
.and(Name::parser().preceded_by(tag("/")))
.map(|(category, name)| Cp { category, name })
}
}
impl<'a> Parseable<'a, &'a str> for Cpv {
type Parser = impl Parser<&'a str, Output = Self>;