31 lines
906 B
Go
31 lines
906 B
Go
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]
|
|
}
|