registry.go 548 B

12345678910111213141516171819202122232425262728293031323334
  1. package convert
  2. import (
  3. "strings"
  4. "sync"
  5. )
  6. type Plugin interface {
  7. Apply(spec *Spec)
  8. }
  9. var (
  10. pluginMu sync.RWMutex
  11. plugins = map[string]Plugin{}
  12. )
  13. func Register(archKey string, p Plugin) {
  14. archKey = strings.ToLower(archKey)
  15. pluginMu.Lock()
  16. defer pluginMu.Unlock()
  17. plugins[archKey] = p
  18. }
  19. func pluginForArchitecture(architecture string) Plugin {
  20. archLower := strings.ToLower(architecture)
  21. pluginMu.RLock()
  22. defer pluginMu.RUnlock()
  23. for k, p := range plugins {
  24. if strings.Contains(archLower, k) {
  25. return p
  26. }
  27. }
  28. return nil
  29. }