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
use crate::errors::parser_error::ParserError;
use crate::parser::constants::{DEPENDS_KEYWORD, ON_KEYWORD};
use crate::parser::kconfig_parser_impl::parser_traits::{LineParsingContext, ParseableFromLine};
use crate::parser::utils::tokenizer::LineKConfigTokenizerIterator;
use crate::structure::atoms::KconfigDependency;
use crate::structure::atoms::KconfigExpression;
impl ParseableFromLine for KconfigDependency {
fn parse_from_line(context: &LineParsingContext) -> Result<Self, ParserError> {
let mut tokens = LineKConfigTokenizerIterator::from_line(context.line.get_line());
if !tokens.next()
.contains(&DEPENDS_KEYWORD) {
return Err(ParserError::syntax_in_line_span("Expected depends keyword here", &context.line));
}
if !tokens.next()
.contains(&ON_KEYWORD) {
return Err(ParserError::syntax_in_line_span("Expected on keyword here", &context.line));
}
let expr_source = tokens.get_remaining_slice().trim();
let expression = KconfigExpression::new(expr_source.to_string());
Ok(KconfigDependency {
expression,
})
}
}