From 0448a529264d1a27d741bc817de468f8d359072d Mon Sep 17 00:00:00 2001 From: John Turner Date: Thu, 13 Nov 2025 19:49:22 +0000 Subject: [PATCH] impl Cp type --- src/atom/mod.rs | 12 ++++++++++++ src/atom/parsers.rs | 16 +++++++++++++--- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/atom/mod.rs b/src/atom/mod.rs index 0d1d3a9..6688665 100644 --- a/src/atom/mod.rs +++ b/src/atom/mod.rs @@ -108,6 +108,12 @@ pub struct UseDep { condition: Option, } +#[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) diff --git a/src/atom/parsers.rs b/src/atom/parsers.rs index 9d3cb15..4806857 100644 --- a/src/atom/parsers.rs +++ b/src/atom/parsers.rs @@ -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>;