-
Notifications
You must be signed in to change notification settings - Fork 2
/
plugins.go
53 lines (44 loc) · 1.1 KB
/
plugins.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
package pkg
import (
"context"
"fmt"
)
type PlatformFactory func(ctx context.Context) (Love, error)
type ManagerFactory func(ctx context.Context) LoveBag
var (
platform = make(map[string]PlatformFactory)
manager = make(map[string]ManagerFactory)
)
func RegistarPlatform(name string, p PlatformFactory) {
if _, found := platform[name]; found {
fmt.Errorf("Platform %v already exists", name)
}
platform[name] = p
}
func RegistarManager(name string, m ManagerFactory) {
if _, found := manager[name]; found {
fmt.Errorf("Manager %v already exists", name)
}
manager[name] = m
}
func GetAllRegistereredManager() []string {
managers := []string{}
for name := range manager {
managers = append(managers, name)
}
return managers
}
func GetPlatform(name string, ctx context.Context) (Love, error) {
p, found := platform[name]
if !found {
return nil, fmt.Errorf("platform %v not found", name)
}
return p(ctx)
}
func GetManager(name string, ctx context.Context) (LoveBag, error) {
m, found := manager[name]
if !found {
return nil, fmt.Errorf("platform %v not found", name)
}
return m(ctx), nil
}