53 lines
1.2 KiB
Go
53 lines
1.2 KiB
Go
|
|
package signplatform
|
||
|
|
|
||
|
|
import (
|
||
|
|
"fmt"
|
||
|
|
|
||
|
|
"hyapi-server/internal/domains/certification/enums"
|
||
|
|
"hyapi-server/internal/domains/certification/ports"
|
||
|
|
)
|
||
|
|
|
||
|
|
type Registry struct {
|
||
|
|
providers map[enums.SignPlatform]ports.SignPlatformProvider
|
||
|
|
order []enums.SignPlatform
|
||
|
|
}
|
||
|
|
|
||
|
|
func NewRegistry(providers ...ports.SignPlatformProvider) *Registry {
|
||
|
|
r := &Registry{
|
||
|
|
providers: make(map[enums.SignPlatform]ports.SignPlatformProvider, len(providers)),
|
||
|
|
order: make([]enums.SignPlatform, 0, len(providers)),
|
||
|
|
}
|
||
|
|
for _, p := range providers {
|
||
|
|
if p == nil {
|
||
|
|
continue
|
||
|
|
}
|
||
|
|
platform := p.Platform()
|
||
|
|
r.providers[platform] = p
|
||
|
|
r.order = append(r.order, platform)
|
||
|
|
}
|
||
|
|
return r
|
||
|
|
}
|
||
|
|
|
||
|
|
func (r *Registry) Get(platform enums.SignPlatform) (ports.SignPlatformProvider, error) {
|
||
|
|
if platform == "" {
|
||
|
|
platform = enums.DefaultSignPlatform()
|
||
|
|
}
|
||
|
|
p, ok := r.providers[platform]
|
||
|
|
if !ok {
|
||
|
|
return nil, fmt.Errorf("不支持的签署平台: %s", platform)
|
||
|
|
}
|
||
|
|
return p, nil
|
||
|
|
}
|
||
|
|
|
||
|
|
func (r *Registry) List() []ports.SignPlatformProvider {
|
||
|
|
out := make([]ports.SignPlatformProvider, 0, len(r.order))
|
||
|
|
for _, platform := range r.order {
|
||
|
|
if p, ok := r.providers[platform]; ok {
|
||
|
|
out = append(out, p)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
return out
|
||
|
|
}
|
||
|
|
|
||
|
|
var _ ports.SignPlatformRegistry = (*Registry)(nil)
|