cosmos-sdk/depinject/internal/graphviz/attrs.go

61 lines
1.9 KiB
Go

package graphviz
import (
"fmt"
"strings"
"cosmossdk.io/depinject/internal/util"
)
// Attributes represents a graphviz attributes map.
type Attributes struct {
attrs map[string]string
}
// NewAttributes creates a new Attributes instance.
func NewAttributes() *Attributes {
return &Attributes{attrs: map[string]string{}}
}
// SetAttr sets the graphviz attribute to the provided value.
func (a *Attributes) SetAttr(name, value string) { a.attrs[name] = value }
// SetShape sets the shape attribute.
func (a *Attributes) SetShape(shape string) { a.SetAttr("shape", shape) }
// SetColor sets the color attribute.
func (a *Attributes) SetColor(color string) { a.SetAttr("color", color) }
// SetBgColor sets the bgcolor attribute.
func (a *Attributes) SetBgColor(color string) { a.SetAttr("bgcolor", color) }
// SetLabel sets the label attribute.
func (a *Attributes) SetLabel(label string) { a.SetAttr("label", label) }
// SetComment sets the comment attribute.
func (a *Attributes) SetComment(comment string) { a.SetAttr("comment", comment) }
// SetPenWidth sets the penwidth attribute.
func (a *Attributes) SetPenWidth(w string) { a.SetAttr("penwidth", w) }
// SetFontColor sets the fontcolor attribute.
func (a *Attributes) SetFontColor(color string) { a.SetAttr("fontcolor", color) }
// SetFontSize sets the fontsize attribute.
func (a *Attributes) SetFontSize(size string) { a.SetAttr("fontsize", size) }
// SetStyle sets the style attribute.
func (a *Attributes) SetStyle(style string) { a.SetAttr("style", style) }
// String returns the attributes graphviz string in the format [name = "value", ...].
func (a *Attributes) String() string {
if len(a.attrs) == 0 {
return ""
}
var attrStrs []string
for _, k := range util.OrderedMapKeys(a.attrs) {
attrStrs = append(attrStrs, fmt.Sprintf("%s=%q", k, a.attrs[k]))
}
return fmt.Sprintf("[%s]", strings.Join(attrStrs, ", "))
}