@@ -432,15 +432,17 @@ pub trait Labeller<'a,N,E> {
432
432
}
433
433
434
434
impl < ' a > LabelText < ' a > {
435
- pub fn label < S : IntoCow < ' a , str > > ( s : S ) -> LabelText < ' a > {
435
+ pub fn label < S : IntoCow < ' a , str > > ( s : S ) -> LabelText < ' a > {
436
436
LabelStr ( s. into_cow ( ) )
437
437
}
438
438
439
- pub fn escaped < S : IntoCow < ' a , str > > ( s : S ) -> LabelText < ' a > {
439
+ pub fn escaped < S : IntoCow < ' a , str > > ( s : S ) -> LabelText < ' a > {
440
440
EscStr ( s. into_cow ( ) )
441
441
}
442
442
443
- fn escape_char < F > ( c : char , mut f : F ) where F : FnMut ( char ) {
443
+ fn escape_char < F > ( c : char , mut f : F )
444
+ where F : FnMut ( char )
445
+ {
444
446
match c {
445
447
// not escaping \\, since Graphviz escString needs to
446
448
// interpret backslashes; see EscStr above.
@@ -531,29 +533,36 @@ pub enum RenderOption {
531
533
}
532
534
533
535
/// Returns vec holding all the default render options.
534
- pub fn default_options ( ) -> Vec < RenderOption > { vec ! [ ] }
536
+ pub fn default_options ( ) -> Vec < RenderOption > {
537
+ vec ! [ ]
538
+ }
535
539
536
540
/// Renders directed graph `g` into the writer `w` in DOT syntax.
537
541
/// (Simple wrapper around `render_opts` that passes a default set of options.)
538
- pub fn render < ' a , N : Clone +' a , E : Clone +' a , G : Labeller < ' a , N , E > +GraphWalk < ' a , N , E > , W : Write > (
539
- g : & ' a G ,
540
- w : & mut W ) -> io:: Result < ( ) > {
542
+ pub fn render < ' a , N : Clone , ' a , E : Clone , ' a , G : Labeller < ' a , N , E > , GraphWalk <' a , N , E >, W : Write >
543
+ ( g : & ' a G ,
544
+ w : & mut W )
545
+ -> io:: Result < ( ) > {
541
546
render_opts ( g, w, & [ ] )
542
547
}
543
548
544
549
/// Renders directed graph `g` into the writer `w` in DOT syntax.
545
550
/// (Main entry point for the library.)
546
- pub fn render_opts < ' a , N : Clone +' a , E : Clone +' a , G : Labeller < ' a , N , E > +GraphWalk < ' a , N , E > , W : Write > (
547
- g : & ' a G ,
548
- w : & mut W ,
549
- options : & [ RenderOption ] ) -> io:: Result < ( ) >
550
- {
551
- fn writeln < W : Write > ( w : & mut W , arg : & [ & str ] ) -> io:: Result < ( ) > {
551
+ pub fn render_opts < ' a ,
552
+ N : Clone , ' a ,
553
+ E : Clone , ' a ,
554
+ G : Labeller < ' a , N , E > , GraphWalk <' a , N , E >,
555
+ W : Write >
556
+ ( g : & ' a G ,
557
+ w : & mut W ,
558
+ options : & [ RenderOption ] )
559
+ -> io:: Result < ( ) > {
560
+ fn writeln < W : Write > ( w : & mut W , arg : & [ & str ] ) -> io:: Result < ( ) > {
552
561
for & s in arg { try!( w. write_all ( s. as_bytes ( ) ) ) ; }
553
562
write ! ( w, "\n " )
554
563
}
555
564
556
- fn indent < W : Write > ( w : & mut W ) -> io:: Result < ( ) > {
565
+ fn indent < W : Write > ( w : & mut W ) -> io:: Result < ( ) > {
557
566
w. write_all ( b" " )
558
567
}
559
568
@@ -657,9 +666,7 @@ mod tests {
657
666
}
658
667
659
668
impl LabelledGraph {
660
- fn new ( name : & ' static str ,
661
- node_labels : Trivial ,
662
- edges : Vec < Edge > ) -> LabelledGraph {
669
+ fn new ( name : & ' static str , node_labels : Trivial , edges : Vec < Edge > ) -> LabelledGraph {
663
670
LabelledGraph {
664
671
name : name,
665
672
node_labels : node_labels. to_opt_strs ( ) ,
@@ -671,7 +678,8 @@ mod tests {
671
678
impl LabelledGraphWithEscStrs {
672
679
fn new ( name : & ' static str ,
673
680
node_labels : Trivial ,
674
- edges : Vec < Edge > ) -> LabelledGraphWithEscStrs {
681
+ edges : Vec < Edge > )
682
+ -> LabelledGraphWithEscStrs {
675
683
LabelledGraphWithEscStrs {
676
684
graph : LabelledGraph :: new ( name, node_labels, edges)
677
685
}
@@ -695,52 +703,56 @@ mod tests {
695
703
None => LabelStr ( id_name ( n) . name ( ) ) ,
696
704
}
697
705
}
698
- fn edge_label ( & ' a self , e : & & ' a Edge ) -> LabelText < ' a > {
706
+ fn edge_label ( & ' a self , e : & & ' a Edge ) -> LabelText < ' a > {
699
707
LabelStr ( e. label . into_cow ( ) )
700
708
}
701
709
}
702
710
703
711
impl < ' a > Labeller < ' a , Node , & ' a Edge > for LabelledGraphWithEscStrs {
704
- fn graph_id ( & ' a self ) -> Id < ' a > { self . graph . graph_id ( ) }
705
- fn node_id ( & ' a self , n : & Node ) -> Id < ' a > { self . graph . node_id ( n) }
712
+ fn graph_id ( & ' a self ) -> Id < ' a > {
713
+ self . graph . graph_id ( )
714
+ }
715
+ fn node_id ( & ' a self , n : & Node ) -> Id < ' a > {
716
+ self . graph . node_id ( n)
717
+ }
706
718
fn node_label ( & ' a self , n : & Node ) -> LabelText < ' a > {
707
719
match self . graph . node_label ( n) {
708
720
LabelStr ( s) | EscStr ( s) => EscStr ( s) ,
709
721
}
710
722
}
711
- fn edge_label ( & ' a self , e : & & ' a Edge ) -> LabelText < ' a > {
723
+ fn edge_label ( & ' a self , e : & & ' a Edge ) -> LabelText < ' a > {
712
724
match self . graph . edge_label ( e) {
713
725
LabelStr ( s) | EscStr ( s) => EscStr ( s) ,
714
726
}
715
727
}
716
728
}
717
729
718
730
impl < ' a > GraphWalk < ' a , Node , & ' a Edge > for LabelledGraph {
719
- fn nodes ( & ' a self ) -> Nodes < ' a , Node > {
731
+ fn nodes ( & ' a self ) -> Nodes < ' a , Node > {
720
732
( 0 ..self . node_labels . len ( ) ) . collect ( )
721
733
}
722
- fn edges ( & ' a self ) -> Edges < ' a , & ' a Edge > {
734
+ fn edges ( & ' a self ) -> Edges < ' a , & ' a Edge > {
723
735
self . edges . iter ( ) . collect ( )
724
736
}
725
- fn source ( & ' a self , edge : & & ' a Edge ) -> Node {
737
+ fn source ( & ' a self , edge : & & ' a Edge ) -> Node {
726
738
edge. from
727
739
}
728
- fn target ( & ' a self , edge : & & ' a Edge ) -> Node {
740
+ fn target ( & ' a self , edge : & & ' a Edge ) -> Node {
729
741
edge. to
730
742
}
731
743
}
732
744
733
745
impl < ' a > GraphWalk < ' a , Node , & ' a Edge > for LabelledGraphWithEscStrs {
734
- fn nodes ( & ' a self ) -> Nodes < ' a , Node > {
746
+ fn nodes ( & ' a self ) -> Nodes < ' a , Node > {
735
747
self . graph . nodes ( )
736
748
}
737
- fn edges ( & ' a self ) -> Edges < ' a , & ' a Edge > {
749
+ fn edges ( & ' a self ) -> Edges < ' a , & ' a Edge > {
738
750
self . graph . edges ( )
739
751
}
740
- fn source ( & ' a self , edge : & & ' a Edge ) -> Node {
752
+ fn source ( & ' a self , edge : & & ' a Edge ) -> Node {
741
753
edge. from
742
754
}
743
- fn target ( & ' a self , edge : & & ' a Edge ) -> Node {
755
+ fn target ( & ' a self , edge : & & ' a Edge ) -> Node {
744
756
edge. to
745
757
}
746
758
}
@@ -781,8 +793,7 @@ r#"digraph single_node {
781
793
#[ test]
782
794
fn single_edge ( ) {
783
795
let labels : Trivial = UnlabelledNodes ( 2 ) ;
784
- let result = test_input ( LabelledGraph :: new ( "single_edge" , labels,
785
- vec ! ( edge( 0 , 1 , "E" ) ) ) ) ;
796
+ let result = test_input ( LabelledGraph :: new ( "single_edge" , labels, vec ! ( edge( 0 , 1 , "E" ) ) ) ) ;
786
797
assert_eq ! ( result. unwrap( ) ,
787
798
r#"digraph single_edge {
788
799
N0[label="N0"];
@@ -795,7 +806,8 @@ r#"digraph single_edge {
795
806
#[ test]
796
807
fn test_some_labelled ( ) {
797
808
let labels : Trivial = SomeNodesLabelled ( vec ! [ Some ( "A" ) , None ] ) ;
798
- let result = test_input ( LabelledGraph :: new ( "test_some_labelled" , labels,
809
+ let result = test_input ( LabelledGraph :: new ( "test_some_labelled" ,
810
+ labels,
799
811
vec ! [ edge( 0 , 1 , "A-1" ) ] ) ) ;
800
812
assert_eq ! ( result. unwrap( ) ,
801
813
r#"digraph test_some_labelled {
@@ -809,8 +821,7 @@ r#"digraph test_some_labelled {
809
821
#[ test]
810
822
fn single_cyclic_node ( ) {
811
823
let labels : Trivial = UnlabelledNodes ( 1 ) ;
812
- let r = test_input ( LabelledGraph :: new ( "single_cyclic_node" , labels,
813
- vec ! ( edge( 0 , 0 , "E" ) ) ) ) ;
824
+ let r = test_input ( LabelledGraph :: new ( "single_cyclic_node" , labels, vec ! ( edge( 0 , 0 , "E" ) ) ) ) ;
814
825
assert_eq ! ( r. unwrap( ) ,
815
826
r#"digraph single_cyclic_node {
816
827
N0[label="N0"];
@@ -822,9 +833,9 @@ r#"digraph single_cyclic_node {
822
833
#[ test]
823
834
fn hasse_diagram ( ) {
824
835
let labels = AllNodesLabelled ( vec ! ( "{x,y}" , "{x}" , "{y}" , "{}" ) ) ;
825
- let r = test_input ( LabelledGraph :: new (
826
- "hasse_diagram" , labels,
827
- vec ! ( edge( 0 , 1 , "" ) , edge( 0 , 2 , "" ) ,
836
+ let r = test_input ( LabelledGraph :: new ( "hasse_diagram" ,
837
+ labels,
838
+ vec ! ( edge( 0 , 1 , "" ) , edge( 0 , 2 , "" ) ,
828
839
edge( 1 , 3 , "" ) , edge( 2 , 3 , "" ) ) ) ) ;
829
840
assert_eq ! ( r. unwrap( ) ,
830
841
r#"digraph hasse_diagram {
@@ -856,9 +867,9 @@ r#"digraph hasse_diagram {
856
867
857
868
let mut writer = Vec :: new ( ) ;
858
869
859
- let g = LabelledGraphWithEscStrs :: new (
860
- "syntax_tree" , labels,
861
- vec ! ( edge( 0 , 1 , "then" ) , edge( 0 , 2 , "else" ) ,
870
+ let g = LabelledGraphWithEscStrs :: new ( "syntax_tree" ,
871
+ labels,
872
+ vec ! ( edge( 0 , 1 , "then" ) , edge( 0 , 2 , "else" ) ,
862
873
edge( 1 , 3 , ";" ) , edge( 2 , 3 , ";" ) ) ) ;
863
874
864
875
render ( & g, & mut writer) . unwrap ( ) ;
0 commit comments