From 847e5fc019f4b806c49a60d930e9d6ee352b6d5e Mon Sep 17 00:00:00 2001 From: John Turner Date: Mon, 27 Oct 2025 21:58:35 -0400 Subject: [PATCH] impl IUseFlag type --- src/useflag/mod.rs | 8 ++++++++ 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, + })) +}