Expand description



This crate is used to generate dot graphs with types defined in rust. The whole crate is implemented following the dot language specification listed at graphviz’s website.


This crate implements a subset of the attributes list of the dot language. You can write something like:

use tabbycat::attributes::*;
use tabbycat::AttrList;
let attrlist =  AttrList::new()
assert_eq!("[fontsize=12;label=\"test\";][fillcolor=blue;arrowhead=orinv;]", attrlist.to_string())


use tabbycat::attributes::*;
use tabbycat::{AttrList, GraphBuilder, GraphType, Identity, StmtList, Edge, SubGraph};
let graph = GraphBuilder::default()
        .add_node(Identity::id("A").unwrap(), None, Some(AttrList::new().add_pair(color(Color::Red))))
        .add_edge(Edge::head_node(Identity::id("B").unwrap(), None)
            .arrow_to_node(Identity::id("C").unwrap(), None)
                .add_edge(Edge::head_node(Identity::id("E").unwrap(), None)
                    .arrow_to_node(Identity::id("F").unwrap(), None)))))
println!("{}", graph);

This will generate an output like:

digraph G{A[color=red;];B->C[arrowhead=diamond;];subgraph D{E->F;};}


This module implements a subset of dot language attributes. These functions will generate some predefined AttrPairs that be used together with the add_attrpair function of Edge and the add_pair function of AttrList. Notice that only an incomplete subset is implemented due to the limitations of the function prototype and type system. To add other attributes, you can use an unsafe way to construct an identity pair.


The list of attributes

An edge in the dot language.

A body part of edge

Graph in the dot language. You can construct it with the GraphBuilder.

Builder for Graph.

The list of statements, including:


The types of global attributes


A node of the edge

The tag of the edge operation

The types of graphs

An identity in the dot language. You are recommended to construct it in one of the following ways:

The port suffix.

A single line of statement. You should not construct it directly in most cases. We still expose this type because we only implement a subset of dot language so you may need to write special statements on your own.

A subgraph in the dot language

Type Definitions