Skip to main content

nom_kconfig/entry/
comment.rs

1use nom::{bytes::complete::tag, combinator::map, multi::many0, IResult, Parser};
2#[cfg(feature = "deserialize")]
3use serde::Deserialize;
4#[cfg(feature = "serialize")]
5use serde::Serialize;
6
7use crate::{
8    attribute::{
9        depends_on::{parse_depends_on, DependsOn},
10        prompt::parse_prompt_value,
11    },
12    util::ws,
13    KconfigInput,
14};
15
16/// 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.
17#[derive(Debug, Clone, PartialEq)]
18#[cfg_attr(feature = "hash", derive(Hash))]
19#[cfg_attr(feature = "serialize", derive(Serialize))]
20#[cfg_attr(feature = "deserialize", derive(Deserialize))]
21pub struct Comment {
22    pub prompt: String,
23    pub dependencies: Vec<DependsOn>,
24}
25
26pub fn parse_comment(input: KconfigInput) -> IResult<KconfigInput, Comment> {
27    map(
28        (
29            ws(tag("comment")),
30            ws(parse_prompt_value),
31            many0(ws(parse_depends_on)),
32        ),
33        |(_, prompt, dependencies)| Comment {
34            prompt: prompt.to_string(),
35            dependencies,
36        },
37    )
38    .parse(input)
39}