Skip to content

Commit

Permalink
graph/endcoding/dot: tidy up decode code/docs
Browse files Browse the repository at this point in the history
  • Loading branch information
kortschak committed Jun 8, 2017
1 parent 3724382 commit 5a83d17
Showing 1 changed file with 24 additions and 22 deletions.
46 changes: 24 additions & 22 deletions graph/encoding/dot/decode.go
Expand Up @@ -25,8 +25,8 @@ type Builder interface {
NewEdge(from, to graph.Node) graph.Edge
}

// UnmarshalerAttr is the interface implemented by objects that can unmarshal a
// DOT attribute description of themselves.
// UnmarshalerAttr is implemented by types that can unmarshal a DOT
// attribute description of themselves.
type UnmarshalerAttr interface {
// UnmarshalDOTAttr decodes a single DOT attribute.
UnmarshalDOTAttr(attr Attribute) error
Expand Down Expand Up @@ -103,16 +103,17 @@ func (gen *generator) node(dst Builder, id string) graph.Node {
func (gen *generator) addStmt(dst Builder, stmt ast.Stmt) {
switch stmt := stmt.(type) {
case *ast.NodeStmt:
n := gen.node(dst, stmt.Node.ID)
if n, ok := n.(UnmarshalerAttr); ok {
for _, attr := range stmt.Attrs {
a := Attribute{
Key: attr.Key,
Value: attr.Val,
}
if err := n.UnmarshalDOTAttr(a); err != nil {
panic(fmt.Errorf("unable to unmarshal node DOT attribute (%s=%s)", a.Key, a.Value))
}
n, ok := gen.node(dst, stmt.Node.ID).(UnmarshalerAttr)
if !ok {
return
}
for _, attr := range stmt.Attrs {
a := Attribute{
Key: attr.Key,
Value: attr.Val,
}
if err := n.UnmarshalDOTAttr(a); err != nil {
panic(fmt.Errorf("unable to unmarshal node DOT attribute (%s=%s)", a.Key, a.Value))
}
}
case *ast.EdgeStmt:
Expand All @@ -136,16 +137,17 @@ func (gen *generator) addEdgeStmt(dst Builder, e *ast.EdgeStmt) {
ts := gen.addEdge(dst, e.To)
for _, f := range fs {
for _, t := range ts {
edge := dst.NewEdge(f, t)
if edge, ok := edge.(UnmarshalerAttr); ok {
for _, attr := range e.Attrs {
a := Attribute{
Key: attr.Key,
Value: attr.Val,
}
if err := edge.UnmarshalDOTAttr(a); err != nil {
panic(fmt.Errorf("unable to unmarshal edge DOT attribute (%s=%s)", a.Key, a.Value))
}
edge, ok := dst.NewEdge(f, t).(UnmarshalerAttr)
if !ok {
continue
}
for _, attr := range e.Attrs {
a := Attribute{
Key: attr.Key,
Value: attr.Val,
}
if err := edge.UnmarshalDOTAttr(a); err != nil {
panic(fmt.Errorf("unable to unmarshal edge DOT attribute (%s=%s)", a.Key, a.Value))
}
}
}
Expand Down

0 comments on commit 5a83d17

Please sign in to comment.