Gitee Issue

开发指导

参考:https://gitee.com/openeuler/open-source-summer/issues/I6XKVU?from=project-issue

当前rust支持toml格式,systemd与toml格式有不少异同,例如,

  • systemd的所有值不需要添加引号,
  • 对于特定的值解析方式不同,date、time、bool等类型

因此该题目详细的实现要求如下:

  1. 能够识别解析.service,.socket, .target, .mount等systemd支持的后缀
  2. 将配置文件中的键值对,加载并解析成对应的数据结构,可直接使用,参赛者无须关心使用者如何定义该struct。譬如
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#[derive(Config, Default, Clone, Debug, Serialize, Deserialize)]
pub(super) struct SectionService {
pub Type: ServiceType,
pub ExecStart: Option<VecDeque<ExecCommand>>,
pub ExecStartPre: Option<VecDeque<ExecCommand>>,
pub ExecStartPost: Option<VecDeque<ExecCommand>>,
pub ExecStop: Option<VecDeque<ExecCommand>>,
pub ExecStopPost: Option<VecDeque<ExecCommand>>,
pub ExecReload: Option<VecDeque<ExecCommand>>,
pub ExecCondition: Option<VecDeque<ExecCommand>>,
pub Sockets: Option<Vec<String>>,
pub WatchdogSec: u64,
pub PIDFile: Option<PathBuf>,
pub RemainAfterExit: bool,
}
  1. 该题目重点是提供类似如下宏的使用方式,#[derive(Config)], 可参考confique的实现。
  2. 对于不支持的键和值类型,给出告警信息,如不符合systemd date类型的值。
  3. 可选的提供一个简单的命令行界面,让用户可以输入配置文件路径并查看解析结果。便于调试和用户校验。