package registry // A Converter is a directed graph of conversions between representations. Each // node is a representation name, and each edge is a Conversion. type Converter struct { data map[string][]Conversion } // NewConverter creates an empty Converter with no registered conversions. func NewConverter() *Converter { return &Converter{data: map[string][]Conversion{}} } // Add registers a conversion, adding an edge from its source representation // to its target representation. func (g *Converter) Add(c Conversion) { conversionsFromIn, ok := g.data[c.InType()] if !ok { conversionsFromIn = []Conversion{} } conversionsFromIn = append(conversionsFromIn, c) g.data[c.InType()] = conversionsFromIn } // ConversionsFrom returns all conversions that have the given representation // as their source type. func (g *Converter) ConversionsFrom(t string) []Conversion { return g.data[t] }