// Vikunja is a to-do list application to facilitate your life. // Copyright 2018-present Vikunja and contributors. All rights reserved. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Affero General Public License for more details. // // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . package plugins import "sync" // Registry keeps track of loaded plugins. type Registry struct { mu sync.RWMutex plugins map[string]Plugin } // NewRegistry creates a new Registry. func NewRegistry() *Registry { return &Registry{plugins: make(map[string]Plugin)} } // Add registers a plugin. func (r *Registry) Add(p Plugin) { r.mu.Lock() defer r.mu.Unlock() r.plugins[p.Name()] = p } // All returns all registered plugins. func (r *Registry) All() []Plugin { r.mu.RLock() defer r.mu.RUnlock() res := make([]Plugin, 0, len(r.plugins)) for _, p := range r.plugins { res = append(res, p) } return res }