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
use nom::{bytes::complete::tag, combinator::map, multi::many0, sequence::tuple, IResult};
#[cfg(feature = "deserialize")]
use serde::Deserialize;
#[cfg(feature = "serialize")]
use serde::Serialize;

use crate::{
    attribute::{depends_on::parse_depends_on, prompt::parse_prompt_value, Attribute},
    util::ws,
    KconfigInput,
};

/// This defines a comment which is displayed to the user during the configuration process and is also echoed to the output files. The only possible options are dependencies.
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "hash", derive(Hash))]
#[cfg_attr(feature = "serialize", derive(Serialize))]
#[cfg_attr(feature = "deserialize", derive(Deserialize))]
pub struct Comment {
    pub prompt: String,
    pub dependencies: Vec<Attribute>,
}

pub fn parse_comment(input: KconfigInput) -> IResult<KconfigInput, Comment> {
    map(
        tuple((
            ws(tag("comment")),
            ws(parse_prompt_value),
            many0(ws(parse_depends_on)),
        )),
        |(_, prompt, dependencies)| Comment {
            prompt: prompt.to_string(),
            dependencies,
        },
    )(input)
}