| Crates.io | wmap-parser |
| lib.rs | wmap-parser |
| version | 1.0.0 |
| created_at | 2025-12-16 15:18:47.78934+00 |
| updated_at | 2025-12-16 15:18:47.78934+00 |
| description | A parser for wmap formatted Wardley Map files. |
| homepage | https://git.sr.ht/~rbdr/wmap-parser-rust |
| repository | |
| max_upload_size | |
| id | 1988046 |
| size | 164,107 |
A parser for wmap formatted Wardley Map files built in rust.
Add it to your project with cargo add
cargo add wmap-parser
use wmap_parser::parse;
fn main() {
let wmap_source = r#"
[I] 0.25
[II] 0.5
[III] 0.75
[IV] 1.0
Tea (0.9, 0.5) [Circle]
Cup (0.8, 0.4)
Hot Water (0.6, 0.2)
Tea -> Cup
Cup -> Hot Water
[Note] (0.5, 0.5) Supply chain for tea
[Group] Tea, Cup
[Inertia] Cup
[Evolution] Tea + 0.1
"#;
let map = parse(wmap_source);
println!("{:?}", map.components);
// [
// Component { label: "Tea", coordinates: (0.9, 0.5), shape: Circle },
// Component { label: "Cup", coordinates: (0.8, 0.4), shape: Circle },
// ...
// ]
println!("{:?}", map.dependencies);
// [
// Dependency { from: "Tea", to: "Cup", is_directed: true },
// ...
// ]
}
parse(source: &str) -> MapParses a wmap formatted string and returns a Map object.
Parameters:
source (&str): The wmap source code to parseReturns:
Map: A Map struct containing the parsed components, dependencies, notes,
stages, groups, inertias, and evolutionsSee The map website for more information on the format.
Benchmarked on an M1 Pro mac. A map with around 120 entities parses in 7µs. While a larger map with slightly under 2000 entities does so in 215µs.
You can run the benchmarks by using:
make benchmark
This project uses a Makefile to run all commands. This is to keep the commands uniform with the other wmap-parser projects.
make test
Or to see coverage
make coverage