digraph oauthlib_legend {

    subgraph cluster_legend {
        label="Legend";

        /*
        method [ shape=record; label="{{RequestValidator\nmethod name|arguments}|return values}" ];
        endpoint [ shape=record; label="{Endpoint name|{function name|arguments}|grant type}" ];
        webframework [ shape=hexagon; label="Upstream functions" ];
        */

        flow_code_token [shape=none,label="Authorization Code\nAccess Token Request"];
        flow_code_auth [shape=none,label="Authorization Code\nAuthorization Request"];
        flow_implicit [shape=none,label="Implicit Grant"];
        flow_password [shape=none,label="Resource Owner Password\nCredentials Grant"];
        flow_clicreds [shape=none,label="Client Credentials Grant"];
        flow_refresh [shape=none,label="Refresh Grant"];
        flow_introspect [shape=none,label="Token Introspection"];
        flow_revoke [shape=none,label="Token Revoke"];
        flow_resource [shape=none,label="Resource Access"];
        flow_code_token -> a [style=bold,color=darkgreen];
        flow_code_auth -> b [style=bold,color=green];
        flow_implicit -> c [style=bold,color=orange];
        flow_password -> d [style=bold,color=red];
        flow_clicreds -> e [style=bold,color=blue];
        flow_refresh -> f [style=bold,color=brown];
        flow_introspect -> g [style=bold,color=yellow];
        flow_revoke -> h [style=bold,color=purple];
        flow_resource -> i [style=bold,color=pink];
        a, b, c, d, e, f, g, h, i [shape=none,label=""];
    }
}
