Crate metro

Source
Expand description

Metro is a crate for creating and rendering graphs similar to git log --graph.

§Example Output

The code for creating the following example, can be found after the graph.

* Station 1
* Station 2
* Station 3
|\
| * Station 4
| |\
| * | Station 5
| | * Station 6
* | | Station 7
| * | Station 8
| | * Station 9
| | |\
| | | |\
| | | | | Station 10 (Detached)
| |_|_|/
|/| | |
| | | * Station 11
| " | |
|  / /
* | | Station 12
| * | Station 13
| | * Station 14
| |/
|/|
| * Station 15
| "
* Station 16

§Example Using Metro

The following example outputs the graph above.

use metro::Metro;

let mut metro = Metro::new();

let mut track1 = metro.new_track();
track1.add_station("Station 1");
track1.add_station("Station 2");
track1.add_station("Station 3");

let mut track2 = track1.split();
track2.add_station("Station 4");

let mut track3 = track2.split();
track2.add_station("Station 5");
track3.add_station("Station 6");

track1.add_station("Station 7");
track2.add_station("Station 8");
track3.add_station("Station 9");

let mut track4 = track3.split();
let track5 = track4.split();

metro.add_station("Station 10 (Detached)");

track5.join(&track1);

track4.add_station("Station 11");

track2.stop();

track1.add_station("Station 12");
track3.add_station("Station 13");
track4.add_station("Station 14");

track4.join(&track1);

track3.add_station("Station 15");

track3.stop();

track1.add_station("Station 16");

let string = metro.to_string().unwrap();

println!("{}", string);

§Example Using Event

The following example outputs the graph above.

use metro::Event::*;

let events = [
    Station(0, "Station 1"),
    Station(0, "Station 2"),
    Station(0, "Station 3"),
    SplitTrack(0, 1),
    Station(1, "Station 4"),
    SplitTrack(1, 2),
    Station(1, "Station 5"),
    Station(2, "Station 6"),
    Station(0, "Station 7"),
    Station(1, "Station 8"),
    Station(2, "Station 9"),
    SplitTrack(2, 3),
    SplitTrack(3, 4),
    Station(5, "Station 10 (Detached)"),
    JoinTrack(4, 0),
    Station(3, "Station 11"),
    StopTrack(1),
    Station(0, "Station 12"),
    Station(2, "Station 13"),
    Station(3, "Station 14"),
    JoinTrack(3, 0),
    Station(2, "Station 15"),
    StopTrack(2),
    Station(0, "Station 16"),
];

let string = metro::to_string(&events).unwrap();

println!("{}", string);

Structs§

Metro
The Metro struct is essentially a more friendly way and builder for creating an Event stream (&[Event]).
Track
The Track struct represents a track in the Metro. The Track struct is created with the new_track or new_track_with_id on Metro.

Enums§

Error
Error is an error that can be returned by to_string, to_vec, and to_writer.
Event
Events are produced automatically by using Metro, but can also be created and used manually.

Functions§

to_string
Write &[Event] to String. Defines a default track with track_id of 0.
to_vec
Write &[Event] to Vec<u8>. Defines a default track with track_id of 0.
to_writer
Write &[Event] to <W: io::Write>. Defines a default track with track_id of 0.