generated from openziti/template-repo
-
Notifications
You must be signed in to change notification settings - Fork 1
/
registry.go
57 lines (45 loc) · 1.77 KB
/
registry.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
/*
Copyright NetFoundry Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package xweb
import (
"fmt"
"github.com/sirupsen/logrus"
)
// Registry describes a registry of binding to ApiHandlerFactory registrations
type Registry interface {
Add(factory ApiHandlerFactory) error
Get(binding string) ApiHandlerFactory
}
// RegistryMap is a basic Registry implementation backed by a simple mapping of binding (string) to ApiHandlerFactory instances
type RegistryMap struct {
factories map[string]ApiHandlerFactory
}
// NewRegistryMap creates a new RegistryMap
func NewRegistryMap() *RegistryMap {
return &RegistryMap{
factories: map[string]ApiHandlerFactory{},
}
}
// Add adds a factory to the registry. Errors if a previous factory with the same binding is registered.
func (registry RegistryMap) Add(factory ApiHandlerFactory) error {
logrus.Debugf("adding xweb factory with binding: %v", factory.Binding())
if _, ok := registry.factories[factory.Binding()]; ok {
return fmt.Errorf("binding [%s] already registered", factory.Binding())
}
registry.factories[factory.Binding()] = factory
return nil
}
// Get retrieves a factory based on a binding or nil if no factory for the binding is registered
func (registry RegistryMap) Get(binding string) ApiHandlerFactory {
return registry.factories[binding]
}