### 5 releases

0.2.3 | May 24, 2022 |
---|---|

0.2.2 | May 18, 2022 |

0.2.1 | May 18, 2022 |

0.2.0 | May 16, 2022 |

0.1.0 | May 15, 2022 |

#**123** in Visualization

**230** downloads per month

Used in **3** crates

**MIT/Apache**

31KB

616 lines

# dot_graph

A library for generating Graphviz DOT language files. The code is forked from dot-rust with new API for easier to use.

## Usage

The very basic three parts of a DOT file and in this library is

,
`Graph`

and `Node`

. `Edge`

is the entry point of the library. You could
generate an empty graph .dot file by simply use:`Graph`

`use` `dot_graph``::``{`Graph`,` Kind`}``;`
`let` graph `=` `Graph``::`new`(``"`empty_graph`"``,` `Kind``::`Digraph`)``;`
`let` dot_string `=` graph`.``to_dot_string``(``)``.``unwrap``(``)``;`
`assert_eq!``(`dot_string`,`
`r``#"`digraph empty_graph {
}
//!`"#``)``;`

In order to add some basic nodes and edges:

`use` `dot_graph``::``{`Graph`,` Kind`,` Node`,` Edge`}``;`
`let` `mut` graph `=` `Graph``::`new`(``"`single_edge`"``,` `Kind``::`Digraph`)``;`
graph`.``add_node``(``Node``::`new`(``"`N0`"``)``)``;`
graph`.``add_node``(``Node``::`new`(``"`N1`"``)``)``;`
graph`.``add_edge``(``Edge``::`new`(``"`N0`"``,` `"`N1`"``,` `"`E`"``)``)``;`
`let` dot_string `=` graph`.``to_dot_string``(``)``.``unwrap``(``)``;`
`assert_eq!``(`dot_string`,`
`r``#"`digraph single_edge {
"N0"[label="N0"];
"N1"[label="N1"];
"N0" -> "N1"[label="E"];
}
`"#``)``;`

If you want add some more attributes, like style, arrow, color, you could call these methods in a chain, like:

`use` `dot_graph``::``{`Graph`,` Kind`,` Node`,` Edge`,` Style`}``;`
`let` `mut` graph `=` `Graph``::`new`(``"`single_edge`"``,` `Kind``::`Digraph`)``;`
graph`.``add_node``(``Node``::`new`(``"`N0`"``)``)``;`
graph`.``add_node``(``Node``::`new`(``"`N1`"``)``)``;`
graph`.``add_edge``(``Edge``::`new`(``"`N0`"``,` `"`N1`"``,` `"`E`"``)``.``style``(``Style``::`Bold`)``.``color``(``Some``(``"`red`"``)``)``)``;`
`assert_eq!``(`graph`.``to_dot_string``(``)``.``unwrap``(``)``,`
`r``#"`digraph single_edge {
"N0"[label="N0"];
"N1"[label="N1"];
"N0" -> "N1"[label="E"][style="bold"][color="red"];
}
`"#``)``;`

After version 0.2.1, dot_graph support subgraph generation, for example:

`#``[``test``]`
`fn` `test_subgraph``(``)`` ``{`
`let` `mut` graph `=` `Graph``::`new`(``"`di`"``,` `Kind``::`Digraph`)``;`
`let` `mut` c1 `=` `Subgraph``::`new`(``"`cluster_0`"``)``.``label``(``"``"``)``;`
c1`.``add_node``(``Node``::`new`(``"`N0`"``)``)``;`
c1`.``add_node``(``Node``::`new`(``"`N1`"``)``)``;`
`let` `mut` c2 `=` `Subgraph``::`new`(``"`cluster_1`"``)``.``label``(``"``"``)``;`
c2`.``add_node``(``Node``::`new`(``"`N2`"``)``)``;`
c2`.``add_node``(``Node``::`new`(``"`N3`"``)``)``;`
graph`.``add_subgraph``(`c1`)``;`
graph`.``add_subgraph``(`c2`)``;`
graph`.``add_edge``(``Edge``::`new`(``"`N0`"``,` `"`N1`"``,` `"``"``)``)``;`
graph`.``add_edge``(``Edge``::`new`(``"`N0`"``,` `"`N2`"``,` `"``"``)``)``;`
graph`.``add_edge``(``Edge``::`new`(``"`N1`"``,` `"`N3`"``,` `"``"``)``)``;`
graph`.``add_edge``(``Edge``::`new`(``"`N2`"``,` `"`N3`"``,` `"``"``)``)``;`
`assert_eq!``(`graph`.``to_dot_string``(``)``.``unwrap``(``)``,`
`r``#"`digraph di {
subgraph cluster_0 {
label="";
"N0"[label="N0"];
"N1"[label="N1"];
}
subgraph cluster_1 {
label="";
"N2"[label="N2"];
"N3"[label="N3"];
}
"N0" -> "N1"[label=""];
"N0" -> "N2"[label=""];
"N1" -> "N3"[label=""];
"N2" -> "N3"[label=""];
}
`"#``)``;`
`}`

For more examples, please check the tests.

The library is under active development, we'll include more dot attributes in the future.

## Roadmap (TODO list)

- support for subgraph

## Contributing

- All sorts of contributing are welcome. create issue and/or PR as you please.
- We belive that TDD(Test-Driven Development) approach is helpful not only in development, but also in communication with each other. So adding more tests might be a good way to report a bug or even suggest a new feature.

## License

dot_graph is primarily distributed under the terms of both the MIT license and the Apache License (Version 2.0).

See LICENSE-APACHE and LICENSE-MIT for details.

## Related Project

rudg: Rust UML Diagram Generator. A library for generating UML diagram from Rust source code.