1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
use crate::errors::parser_error::ParserError;
use crate::parser::constants::{IF_KEYWORD, SELECT_KEYWORD};
use crate::parser::kconfig_parser_impl::parser_traits::{LineParsingContext, ParseableFromLine};
use crate::parser::utils::tokenizer::LineKConfigTokenizerIterator;
use crate::structure::atoms::{KconfigExpression, KconfigReverseDependency, KconfigSymbol};
fn get_optional_if_constraint(
tokens: &mut LineKConfigTokenizerIterator,
) -> Option<KconfigExpression> {
if tokens.next().contains(&IF_KEYWORD) {
Some(
KconfigExpression::new(tokens.get_remaining_slice().trim().to_string())
)
} else {
None
}
}
impl ParseableFromLine for KconfigReverseDependency {
fn parse_from_line(
context: &LineParsingContext,
) -> Result<Self, ParserError> {
let mut tokens = LineKConfigTokenizerIterator::from_line(context.line.get_line());
if !tokens.next()
.contains(&SELECT_KEYWORD) {
return Err(ParserError::syntax_in_line_span("Expected select keyword here", &context.line));
}
let reverse_dep_symbol = tokens.next()
.ok_or(
ParserError::syntax_in_line_span("Expected a symbol here for select", &context.line),
)?;
let if_constraint = get_optional_if_constraint(&mut tokens);
Ok(Self {
on_symbol: KconfigSymbol::new(reverse_dep_symbol.to_string()),
if_constraint,
})
}
}