diff options
| author | John Turner <jturner.usa@gmail.com> | 2025-10-29 16:24:25 +0000 |
|---|---|---|
| committer | John Turner <jturner.usa@gmail.com> | 2025-10-29 16:24:25 +0000 |
| commit | 8937e096a4b7eba649817d12d23d3e369a4a4f1d (patch) | |
| tree | 21f53e9d851666f19fde3ff045dfd41c9cf1805e /src/depend | |
| parent | b5765118fead09f3501e99bcb4cc19496912040d (diff) | |
| download | gentoo-utils-8937e096a4b7eba649817d12d23d3e369a4a4f1d.tar.gz | |
create ebuild module
Diffstat (limited to 'src/depend')
| -rw-r--r-- | src/depend/mod.rs | 18 | ||||
| -rw-r--r-- | src/depend/parsers.rs | 86 |
2 files changed, 0 insertions, 104 deletions
diff --git a/src/depend/mod.rs b/src/depend/mod.rs deleted file mode 100644 index 1d85005..0000000 --- a/src/depend/mod.rs +++ /dev/null @@ -1,18 +0,0 @@ -use crate::useflag::UseFlag; - -pub mod parsers; - -#[derive(Clone, Debug)] -pub enum Conditional { - Negative(UseFlag), - Positive(UseFlag), -} - -#[derive(Clone, Debug)] -pub enum Expr<T> { - Element(T), - AllOf(Vec<Self>), - AnyOf(Vec<Self>), - OneOf(Vec<Self>), - ConditionalGroup(Conditional, Vec<Self>), -} diff --git a/src/depend/parsers.rs b/src/depend/parsers.rs deleted file mode 100644 index 975bbe6..0000000 --- a/src/depend/parsers.rs +++ /dev/null @@ -1,86 +0,0 @@ -use mon::{Parser, tag, whitespace1}; - -use crate::{ - Parseable, - depend::{Conditional, Expr}, - useflag::UseFlag, -}; - -impl<'a, T> Parseable<'a, &'a str> for Expr<T> -where - T: Parseable<'a, &'a str>, -{ - type Parser = impl Parser<&'a str, Output = Self>; - - fn parser() -> Self::Parser { - |it| { - let all_of_group = Expr::parser() - .separated_list(whitespace1(), 1..) - .delimited_by(tag("(").followed_by(whitespace1()), tag(")")) - .map(|exprs| Expr::AllOf(exprs)); - - let any_of_group = Expr::parser() - .separated_list(whitespace1(), 1..) - .delimited_by(tag("(").followed_by(whitespace1()), tag(")")) - .preceded_by(tag("||").followed_by(whitespace1())) - .map(|exprs| Expr::AnyOf(exprs)); - - let one_of_group = Expr::parser() - .separated_list(whitespace1(), 1..) - .delimited_by(tag("(").followed_by(whitespace1()), tag(")")) - .preceded_by(tag("^^").followed_by(whitespace1())) - .map(|exprs| Expr::OneOf(exprs)); - - let conditional_group = Conditional::parser() - .followed_by(whitespace1()) - .and( - Expr::parser() - .separated_list(whitespace1(), 1..) - .delimited_by(tag("(").followed_by(whitespace1()), tag(")")), - ) - .map(|(conditional, exprs)| Expr::ConditionalGroup(conditional, exprs)); - - T::parser() - .map(|e| Expr::Element(e)) - .or(conditional_group) - .or(any_of_group) - .or(all_of_group) - .or(one_of_group) - .parse(it) - } - } -} - -impl<'a> Parseable<'a, &'a str> for Conditional { - type Parser = impl Parser<&'a str, Output = Self>; - - fn parser() -> Self::Parser { - UseFlag::parser() - .preceded_by(tag("!")) - .followed_by(tag("?")) - .map(|flag| Conditional::Negative(flag)) - .or(UseFlag::parser() - .followed_by(tag("?")) - .map(|flag| Conditional::Positive(flag))) - } -} - -#[cfg(test)] -mod test { - - use mon::input::InputIter; - - use crate::atom::Atom; - - use super::*; - - #[test] - fn test_expr() { - let it = InputIter::new("flag? ( || ( foo/bar foo/bar ) )"); - - Expr::<Atom>::parser() - .separated_list(whitespace1(), 0..) - .check_finished(it) - .unwrap(); - } -} |
