34 lines
827 B
Go
34 lines
827 B
Go
|
|
package skills
|
||
|
|
|
||
|
|
import (
|
||
|
|
"sync"
|
||
|
|
|
||
|
|
"github.com/sipeed/picoclaw/pkg/config"
|
||
|
|
)
|
||
|
|
|
||
|
|
type RegistryProviderBuilder func(name string, cfg config.SkillRegistryConfig) RegistryProvider
|
||
|
|
|
||
|
|
var (
|
||
|
|
registryProviderBuildersMu sync.RWMutex
|
||
|
|
registryProviderBuilders = map[string]RegistryProviderBuilder{}
|
||
|
|
)
|
||
|
|
|
||
|
|
func RegisterRegistryProviderBuilder(name string, builder RegistryProviderBuilder) {
|
||
|
|
if name == "" || builder == nil {
|
||
|
|
return
|
||
|
|
}
|
||
|
|
registryProviderBuildersMu.Lock()
|
||
|
|
defer registryProviderBuildersMu.Unlock()
|
||
|
|
registryProviderBuilders[name] = builder
|
||
|
|
}
|
||
|
|
|
||
|
|
func buildRegistryProvider(name string, cfg config.SkillRegistryConfig) RegistryProvider {
|
||
|
|
registryProviderBuildersMu.RLock()
|
||
|
|
defer registryProviderBuildersMu.RUnlock()
|
||
|
|
builder := registryProviderBuilders[name]
|
||
|
|
if builder == nil {
|
||
|
|
return nil
|
||
|
|
}
|
||
|
|
return builder(name, cfg)
|
||
|
|
}
|