Skip to main content

nom_kconfig/entry/
configdefault.rs

1use nom::{
2    bytes::complete::tag,
3    combinator::map,
4    multi::many1,
5    sequence::{pair, preceded},
6    IResult, Parser,
7};
8#[cfg(feature = "deserialize")]
9use serde::Deserialize;
10#[cfg(feature = "serialize")]
11use serde::Serialize;
12
13use crate::{
14    attribute::{parse_default, DefaultAttribute},
15    entry::config::parse_config_symbol,
16    util::ws,
17    KconfigInput,
18};
19
20/// This defines a config symbol.
21#[derive(Debug, Clone, PartialEq)]
22#[cfg_attr(feature = "hash", derive(Hash))]
23#[cfg_attr(feature = "serialize", derive(Serialize))]
24#[cfg_attr(feature = "deserialize", derive(Deserialize))]
25pub struct ConfigDefault {
26    pub symbol: String,
27    pub default_attributes: Vec<DefaultAttribute>,
28}
29
30pub fn parse_configdefault(input: KconfigInput) -> IResult<KconfigInput, ConfigDefault> {
31    map(
32        pair(
33            preceded(ws(tag("configdefault")), ws(parse_config_symbol)),
34            many1(parse_default),
35        ),
36        |(symbol, default_attributes)| ConfigDefault {
37            symbol: symbol.to_string(),
38            default_attributes,
39        },
40    )
41    .parse(input)
42}