1 | package main
|
2 |
|
3 | import (
|
4 | "bytes"
|
5 | "io"
|
6 |
|
7 | "gonum.org/v1/gonum/graph"
|
8 | "gonum.org/v1/gonum/graph/encoding/dot"
|
9 | )
|
10 |
|
11 | type Encoding string
|
12 |
|
13 | func (e Encoding) String() string {
|
14 | return string(e)
|
15 | }
|
16 |
|
17 | const (
|
18 | Json = Encoding("Json")
|
19 | Dot = Encoding("Dot")
|
20 | )
|
21 |
|
22 | type Encoder interface {
|
23 | Encode(io.Writer) error
|
24 | }
|
25 |
|
26 | type dotEncoder struct {
|
27 | graph graph.Graph
|
28 | }
|
29 |
|
30 | func (d dotEncoder) Encode(w io.Writer) error {
|
31 | raw, err := dot.Marshal(d.graph, "", "", "")
|
32 | if err != nil {
|
33 | return err
|
34 | }
|
35 | _, err = bytes.NewBuffer(raw).WriteTo(w)
|
36 | return err
|
37 | }
|
38 |
|
39 | func NewEncoder(enc Encoding, g graph.Graph) Encoder {
|
40 | return dotEncoder{graph: g}
|
41 | }
|