5个版本

新增 0.0.4 2024年8月23日
0.0.3 2024年8月22日
0.0.2 2024年8月21日
0.0.1 2024年8月17日
0.0.0 2024年7月16日

#147 in 配置

Download history 83/week @ 2024-07-12 17/week @ 2024-07-19 8/week @ 2024-07-26 2/week @ 2024-08-02 295/week @ 2024-08-16

306 每月下载量

MIT 许可证

54KB
1.5K SLoC

oml

version status

英语 | 简体中文

开放标记语言!一种动态配置脚本语言,可以在配置文件中嵌入脚本代码以实现动态配置更新。

手册

rust

安装:在项目目录中运行 cargo add oml

fn main() {
    let oml_str = r#"
[hello]
value = 12
name = $"hello world {value + 12}"
"#;
    let root = match OmlExpr::from_str(oml_str) {
        Ok(root) => root,
        Err(err) => panic!("Error: {}", err),
    };
    let root = match root.evalute() {
        Ok(root) => root,
        Err(err) => panic!("Error: {}", err),
    };
    assert_eq!(root["hello"]["name"].as_str(), "hello world 24");
}

C++

#include <iostream>
#include <string>

#include "oml/oml.hpp"
#pragma comment(lib, "ws2_32.lib")
#pragma comment(lib, "ntdll.lib")
#pragma comment(lib, "bcrypt.lib")
#pragma comment(lib, "Userenv.lib")
#pragma comment(lib, "oml.lib")

int main() {
	auto oexpr = oml::OmlExpr::from_str(R"(
[hello]
value = 12
name = $"hello world {value + 12}"
)");
	if (oexpr.index() == 1) {
		auto err = std::get<std::string>(oexpr);
		std::cout << err << std::endl;
		return 0;
	}
	auto expr = std::get<oml::OmlExpr>(oexpr);
	auto ovalue = expr.evalute();
	if (ovalue.index() == 1) {
		auto err = std::get<std::string>(ovalue);
		std::cout << err << std::endl;
		return 0;
	}
	auto value = std::get<oml::OmlValue>(ovalue);
	auto str = value["hello"]["name"].as_str();
	std::cout << str << std::endl;
	return 0;
}

依赖

~2–4MB
~73K SLoC