forked from gentoo-utils/gentoo-utils
impl Parseable trait
This commit is contained in:
@@ -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,
|
||||
}))
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user