nom_config_in/entry/
mod.rs

1use nom::{branch::alt, combinator::map, IResult};
2use serde::Serialize;
3
4use crate::{util::ws, ConfigInInput};
5
6use self::{
7    choice::{parse_choice, Choice},
8    command::parse_command,
9    comment::parse_comment,
10    define::{parse_define, Define},
11    define_type::{
12        parse_define_bool, parse_define_hex, parse_define_int, parse_define_string,
13        parse_define_tristate, DefineTristate, DefineType,
14    },
15    dep_type::{
16        parse_dep_bool, parse_dep_mbool, parse_dep_tristate, DepBool, DepMbool, DepTristate,
17    },
18    env_variable::{parse_env_variable, EnvVariable},
19    exec::{parse_exec, Exec},
20    hwaddr::{parse_hwaddr, Hwaddr},
21    main_menu_name::{parse_main_menu_name, MainMenuName},
22    main_menu_option::{parse_main_menu_option, MainMenuOption},
23    r#if::{parse_if, If},
24    r#type::{parse_bool, parse_hex, parse_int, parse_string, parse_tristate, Hex, Int, Type},
25    source::{parse_source, Source},
26    unset::{parse_unset, Unset},
27};
28
29pub mod choice;
30pub mod command;
31pub mod comment;
32pub mod def_bool;
33pub mod define;
34pub mod define_type;
35pub mod dep_type;
36pub mod echo;
37pub mod env_variable;
38pub mod exec;
39pub mod expression;
40pub mod hwaddr;
41pub mod r#if;
42pub mod main_menu_name;
43pub mod main_menu_option;
44pub mod source;
45pub mod r#type;
46pub mod unset;
47
48#[derive(Debug, Serialize, Clone, PartialEq)]
49pub enum Entry {
50    Comment(String),
51    If(If),
52    //TODO Config(Type<String>),
53    Bool(Type<Vec<String>>),
54    Tristate(Type<Option<String>>),
55    String(Type<String>),
56    Hex(Type<Hex>),
57    Int(Type<Int>),
58    DepMbool(DepMbool),
59    DepBool(DepBool),
60    DepTristate(DepTristate),
61    DefineTristate(DefineTristate),
62    DefineBool(DefineType<Vec<String>>),
63    DefineInt(DefineType<i64>),
64    DefineHex(DefineType<String>),
65    DefineString(DefineType<String>),
66    Exec(Exec),
67    //    Echo(Echo),
68    EnvVariable(EnvVariable),
69    Unset(Unset),
70    MainMenuName(MainMenuName),
71    MainMenuOption(MainMenuOption),
72    Choice(Choice),
73    Source(Source),
74    //MainMenu(MainMenu),
75    Define(Define),
76    Hwaddr(Hwaddr),
77    Command(String),
78}
79
80pub fn parse_entry(input: ConfigInInput) -> IResult<ConfigInInput, Entry> {
81    alt((
82        alt((
83            map(ws(parse_define_hex), Entry::DefineHex),
84            map(ws(parse_bool), Entry::Bool),
85            map(ws(parse_int), Entry::Int),
86            map(ws(parse_define_string), Entry::DefineString),
87            map(ws(parse_define_int), Entry::DefineInt),
88            map(ws(parse_define_tristate), Entry::DefineTristate),
89            map(ws(parse_hwaddr), Entry::Hwaddr),
90            map(ws(parse_define_bool), Entry::DefineBool),
91            map(ws(parse_dep_mbool), Entry::DepMbool),
92        )),
93        map(ws(parse_exec), Entry::Exec),
94        //map(ws(parse_def_bool), Entry::DefBool),
95        map(ws(parse_dep_bool), Entry::DepBool),
96        map(ws(parse_string), Entry::String),
97        map(ws(parse_if), Entry::If),
98        map(ws(parse_hex), Entry::Hex),
99        map(ws(parse_unset), Entry::Unset),
100        map(ws(parse_comment), Entry::Comment),
101        map(ws(parse_tristate), Entry::Tristate),
102        map(ws(parse_main_menu_name), Entry::MainMenuName),
103        //map(ws(parse_main_menu), Entry::MainMenu),
104        map(ws(parse_main_menu_option), Entry::MainMenuOption),
105        map(ws(parse_choice), Entry::Choice),
106        map(ws(parse_env_variable), Entry::EnvVariable),
107        map(ws(parse_dep_tristate), Entry::DepTristate),
108        map(ws(parse_source), Entry::Source),
109        map(ws(parse_define), Entry::Define),
110        map(ws(parse_command), Entry::Command),
111    ))(input)
112}
113
114#[cfg(test)]
115mod choice_test;
116#[cfg(test)]
117mod command_test;
118#[cfg(test)]
119mod comment_test;
120#[cfg(test)]
121mod def_bool_test;
122#[cfg(test)]
123mod define_test;
124#[cfg(test)]
125mod define_type_test;
126#[cfg(test)]
127mod dep_type_test;
128#[cfg(test)]
129mod echo_test;
130#[cfg(test)]
131mod env_variable_test;
132#[cfg(test)]
133pub mod exec_test;
134#[cfg(test)]
135pub mod expression_test;
136#[cfg(test)]
137mod hwaddr_test;
138#[cfg(test)]
139pub mod if_test;
140#[cfg(test)]
141mod main_menu_name_test;
142#[cfg(test)]
143pub mod main_menu_option_test;
144#[cfg(test)]
145mod mod_test;
146#[cfg(test)]
147pub mod source_test;
148#[cfg(test)]
149mod type_test;
150#[cfg(test)]
151mod unset_test;