#uml #dot #graph #generator #modeling-language

nightly rust2uml

A library to generating UML language from Rust's project into graphiz/dot file

2 releases

0.0.2 Dec 12, 2023
0.0.1 Dec 12, 2023

#220 in Visualization

MIT/Apache

92KB
2K SLoC

Rust 1.5K SLoC // 0.0% comments PHP 234 SLoC // 0.0% comments

ML -Modeling Language-

Crate travis-badge appveyor-badge dependencyci-badge

A library (and cli tool) to generating UML language from Rust's project into graphiz/dot file.

QuickStart

Obtain mml

$ git clone https://github.com/silence-coding/ml.git
$ cd ml

Install Dependencies

The dot binary from graphviz package must exist in your path.

$ apt install graphviz

(or do the equivalent for your OS)

Nightly rustc is required. Run this from within ml crate.

$ rustup install rustc llvm-tools-preview

Build and run mml

$ cargo run --example ml

important: ml looks for files beneath ./src, so you should always cd to crate root before running it.

View generated diagram

$ firefox target/doc/ml.svg

inkscape also works well as an svg viewer.

Usage

$ ./target/debug/examples/ml --help Usage: ml [OPTIONS]

Parses rust source code and generates UML diagram

Arguments:
--include_fields [bool] include fields/variants in diagram
--include_implems [bool] include trait implementation methods in diagram
--include_methods [bool] include methods in diagram
--struct_header_bgcolor [str] header background color for structs
--struct_fields_bgcolor [str] fields background color for structs
--struct_method_bgcolor [str] methods background color for structs
--struct_implem_bgcolor [str] implems background color for structs
--enum_header_bgcolor [str] header background color for enums
--enum_fields_bgcolor [str] fields background color for enums
--enum_method_bgcolor [str] methods background color for enums
--enum_implem_bgcolor [str] implems background color for enums
--trait_header_bgcolor [str] header background color for traits
--trait_method_bgcolor [str] methods background color for traits
--font [str] Font name

Output is always under target/doc/mml/

You can add ml binary to your path and then you should be able to run it for any rust crate.

--------------------------- Old, possibly obsolete -----------------

Usage

This repo is provided as a Cargo package and a build script.

  1. adjust your Cargo.toml to include.
build = "build.rs"

[build-dependencies.rust2uml]
version = "0.0.1"
  1. And your build.rs to generate your uml graph/viz and Structured Vector Graphics at target/dot/$CARGO_PKG_NAME.{dot,svg}.
extern crate mml;

fn main() {
    let dest: String = concat!("target/doc/", env!("CARGO_PKG_NAME")).to_string();
    let mut config = rust2uml::Config::default();
    rust2uml::Config::set_global(config);
    let _ = rust2uml::src2both("src", dest.replace("-", "_").as_str());
}
  1. (Facultative) From your entry point library file, you can add the generated vectorized graph.
//! ![uml](ml.svg)
  1. (Facultative) With the travis-cargo's instructions, you can prepare your graphviz's dependency like with this example.
addons:
  apt:
    packages:
      - graphviz
before_script:
  - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew update           ; fi
  - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install graphviz ; fi
...
script:
  - |
      travis-cargo build &&
...

Features

Consider this list of fonctionalities like unstandard-uml.

  • implem -- add a column to show the functions from a implementation.
  • fn-emilgardis -- the function fields are preceded by fn keyword (Asked by Emilgardis).

Knowledge

This is a reading list of material relevant to Ml. It includes prior research that has - at one time or another - influenced the design of Ml, as well as publications about Ml.

License

ml is primarily distributed under the terms of both the MIT license and the Apache License (Version 2.0), with portions covered by various BSD-like licenses.

See LICENSE-APACHE, and LICENSE-MIT for details.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Dependencies

~1MB
~15K SLoC