| Crates.io | oml |
| lib.rs | oml |
| version | 0.1.2 |
| created_at | 2024-07-16 14:37:30.994828+00 |
| updated_at | 2025-05-23 13:40:27.13747+00 |
| description | Open Markup Language! |
| homepage | https://github.com/fawdlstty/oml |
| repository | https://github.com/fawdlstty/oml |
| max_upload_size | |
| id | 1305122 |
| size | 4,529,808 |
English | 简体中文
Open Markup Language! A dynamic configuration scripting language that can embed script code in the configuration file to achieve dynamic configuration update.
Install: Run cargo add oml in the project directory
fn main() {
let oml_str = r#"
[hello]
value = 12
name = $"hello {value + 12}"
"#;
let mut eroot = OmlExpr::from_str(oml_str).unwrap();
eroot["hello"]["value"].set_int(30);
let root = eroot.evalute().unwrap();
println!("{}", root["hello"]["name"].as_str()); // hello 42
}
Download and compile static libraries (or dynamic libraries)
git clone git@github.com:fawdlstty/oml.git
cd oml
cargo build --release --lib # debug: cargo build --lib
The static library (or dynamic library) is generated in the target/release directory. Copy it to the C++ project and reference it
#include <iostream>
#include <string>
#include "oml/oml.hpp"
#ifdef _MSC_VER
#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")
#endif
int main() {
auto oexpr = oml::OmlExpr::from_str(R"(
[hello]
value = 12
name = $"hello {value + 12}"
)");
if (oeroot.index() == 1) {
std::cout << std::get<std::string>(oeroot) << std::endl;
return 0;
}
auto eroot = std::get<oml::OmlExpr>(oeroot);
eroot["hello"]["value"].set_int(30);
auto oroot = eroot.evalute();
if (oroot.index() == 1) {
std::cout << std::get<std::string>(oroot) << std::endl;
return 0;
}
auto root = std::get<oml::OmlValue>(oroot);
std::cout << root["hello"]["name"].as_str() << std::endl; // hello 42
return 0;
}
Run command:
dotnet add package oml
Example:
using System;
namespace test {
public class Program {
public static void Main () {
string src = """
[hello]
value = 12
name = $"hello {value + 12}"
""";
var eroot = oml.OmlExpr.from_str (src);
eroot ["hello"] ["value"].set_int (30);
var root = eroot.evalute ();
Console.WriteLine (root ["hello"] ["name"].as_str()); // hello 42
Console.ReadKey ();
}
}
}
The value is available when the conditions are met:
[hello]
value = 12
@if value == 12
name = $"hello {value}"