diff options
| author | John Turner <jturner.usa@gmail.com> | 2025-10-27 21:58:35 -0400 |
|---|---|---|
| committer | John Turner <jturner.usa@gmail.com> | 2025-10-27 21:58:35 -0400 |
| commit | 847e5fc019f4b806c49a60d930e9d6ee352b6d5e (patch) | |
| tree | af584d258aaad5c5ad3c855667166192414faa29 /src | |
| parent | 4789790733c8dcf22febca93bb17847e09d76bdc (diff) | |
| download | gentoo-utils-847e5fc019f4b806c49a60d930e9d6ee352b6d5e.tar.gz | |
impl IUseFlag type
Diffstat (limited to 'src')
| -rw-r--r-- | src/useflag/mod.rs | 8 | ||||
| -rw-r--r-- | src/useflag/parsers.rs | 17 |
2 files changed, 23 insertions, 2 deletions
diff --git a/src/useflag/mod.rs b/src/useflag/mod.rs index 2e7819a..21a746a 100644 --- a/src/useflag/mod.rs +++ b/src/useflag/mod.rs @@ -1,10 +1,18 @@ use core::fmt; +use get::Get; + pub mod parsers; #[derive(Clone, Debug, PartialEq, Eq)] pub struct UseFlag(String); +#[derive(Clone, Debug, PartialEq, Eq, Get)] +pub struct IUseFlag { + default: bool, + flag: UseFlag, +} + impl UseFlag { pub fn get(&self) -> &str { self.0.as_str() diff --git a/src/useflag/parsers.rs b/src/useflag/parsers.rs index e7b73d1..49000d9 100644 --- a/src/useflag/parsers.rs +++ b/src/useflag/parsers.rs @@ -1,6 +1,6 @@ -use mon::{Parser, r#if}; +use mon::{Parser, r#if, tag}; -use crate::useflag::UseFlag; +use crate::useflag::{IUseFlag, UseFlag}; pub fn useflag<'a>() -> impl Parser<&'a str, Output = UseFlag> { let start = r#if(|c: &char| c.is_ascii_alphanumeric()); @@ -11,3 +11,16 @@ pub fn useflag<'a>() -> impl Parser<&'a str, Output = UseFlag> { .recognize() .map(|output: &str| UseFlag(output.to_string())) } + +pub fn iuseflag<'a>() -> impl Parser<&'a str, Output = IUseFlag> { + useflag() + .preceded_by(tag("+")) + .map(|flag| IUseFlag { + default: true, + flag, + }) + .or(useflag().map(|flag| IUseFlag { + default: false, + flag, + })) +} |
