# wmap-parser-rust A parser for `wmap` formatted Wardley Map files built in rust. ## Features * No dependencies. * Free software. * Reasonably fast. ## Installation Add it to your project with cargo add ```bash cargo add wmap-parser ``` ## Usage ```rust 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 }, // ... // ] } ``` ## API ### `parse(source: &str) -> Map` Parses a wmap formatted string and returns a Map object. **Parameters:** - `source` (&str): The wmap source code to parse **Returns:** - `Map`: A Map struct containing the parsed components, dependencies, notes, stages, groups, inertias, and evolutions ## Format Specification See [The map website](https://map.tranquil.systems) for more information on the format. ## Reasonably Fast 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: ```bash make benchmark ``` ## Development This project uses a Makefile to run all commands. This is to keep the commands uniform with the other wmap-parser projects. ### Running Tests ```bash make test ``` Or to see coverage ```bash make coverage ``` ## See Also - [wmap specification](doc/wmap-spec.ebnf) - Formal grammar - [wmap specification](https://git.sr.ht:~rbdr/wmap-parser-js) - Javascript wmap-parser - [wmap specification](https://git.sr.ht:~rbdr/wmap-parser-c) - ANSI C wmap-parser - [wmap specification](https://git.sr.ht:~rbdr/wmap-parser-swift) - Swift wmap-parser - [Wardley Maps](https://wardleymaps.com/) - Learn about Wardley Mapping