summaryrefslogtreecommitdiff
path: root/src/useflag/parsers.rs
diff options
context:
space:
mode:
authorJohn Turner <jturner.usa@gmail.com>2025-10-28 09:44:32 +0000
committerJohn Turner <jturner.usa@gmail.com>2025-10-28 09:47:41 +0000
commitb54616a6dd4f512b4ec87c3780c36257e5c322b3 (patch)
tree9467d9a2292b0e3ca3587c895e158a1cc372787d /src/useflag/parsers.rs
parent92a8e46082a4a3f252cc5fa5afb59716d0657254 (diff)
downloadgentoo-utils-b54616a6dd4f512b4ec87c3780c36257e5c322b3.tar.gz
impl Parseable trait
Diffstat (limited to 'src/useflag/parsers.rs')
-rw-r--r--src/useflag/parsers.rs49
1 files changed, 30 insertions, 19 deletions
diff --git a/src/useflag/parsers.rs b/src/useflag/parsers.rs
index 49000d9..6b13a64 100644
--- a/src/useflag/parsers.rs
+++ b/src/useflag/parsers.rs
@@ -1,26 +1,37 @@
use mon::{Parser, r#if, tag};
-use crate::useflag::{IUseFlag, UseFlag};
+use crate::{
+ Parseable,
+ useflag::{IUseFlag, UseFlag},
+};
-pub fn useflag<'a>() -> impl Parser<&'a str, Output = UseFlag> {
- let start = r#if(|c: &char| c.is_ascii_alphanumeric());
- let rest = r#if(|c: &char| c.is_ascii_alphanumeric() || "+_@-".contains(*c)).list(0..);
+impl<'a> Parseable<'a, &'a str> for UseFlag {
+ type Parser = impl Parser<&'a str, Output = Self>;
- start
- .and(rest)
- .recognize()
- .map(|output: &str| UseFlag(output.to_string()))
+ fn parser() -> Self::Parser {
+ let start = r#if(|c: &char| c.is_ascii_alphanumeric());
+ let rest = r#if(|c: &char| c.is_ascii_alphanumeric() || "+_@-".contains(*c)).list(0..);
+
+ start
+ .and(rest)
+ .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,
- }))
+impl<'a> Parseable<'a, &'a str> for IUseFlag {
+ type Parser = impl Parser<&'a str, Output = Self>;
+
+ fn parser() -> Self::Parser {
+ UseFlag::parser()
+ .preceded_by(tag("+"))
+ .map(|flag| IUseFlag {
+ default: true,
+ flag,
+ })
+ .or(UseFlag::parser().map(|flag| IUseFlag {
+ default: false,
+ flag,
+ }))
+ }
}