nom_kconfig/entry/
function.rs1use nom::{
2 branch::alt,
3 bytes::complete::tag,
4 character::complete::{alphanumeric1, line_ending, not_line_ending, one_of},
5 combinator::{map, recognize},
6 multi::many1,
7 sequence::terminated,
8 IResult, Parser,
9};
10#[cfg(feature = "deserialize")]
11use serde::Deserialize;
12#[cfg(feature = "serialize")]
13use serde::Serialize;
14
15use crate::{util::ws, KconfigInput};
16
17#[derive(Debug, PartialEq, Clone, Default)]
18#[cfg_attr(feature = "hash", derive(Hash))]
19#[cfg_attr(feature = "serialize", derive(Serialize))]
20#[cfg_attr(feature = "deserialize", derive(Deserialize))]
21pub struct Function {
22 pub name: String,
23 pub body: String,
24}
25
26pub fn parse_function(input: KconfigInput) -> IResult<KconfigInput, Function> {
27 map(
28 (
29 recognize(ws(many1(alt((
30 alphanumeric1::<KconfigInput, _>,
31 recognize(one_of("_$()")),
32 ))))),
33 ws(tag("=")),
34 ws(terminated(not_line_ending, line_ending)),
35 ),
36 |(l, _, o)| Function {
37 name: l.trim().to_string(),
38 body: o.to_string(),
39 },
40 )
41 .parse(input)
42}