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,
};
#[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)
}