internal/config/plugin/server.go (32 lines of code) (raw):
package plugin
import (
"fmt"
"github.com/hashicorp/go-plugin"
"github.com/Azure/k6ctl/internal/config"
)
type registryServer struct {
registry config.ProviderRegistry
}
var _ Interface = (*registryServer)(nil)
func (c *registryServer) GetNames() ([]string, error) {
return c.registry.GetNames(), nil
}
func (c *registryServer) Resolve(req ResolveRequest) (string, error) {
provider, ok := c.registry.GetByName(req.Name)
if !ok {
return "", fmt.Errorf("config provider %q not found", req.Name)
}
ctx, cancel := req.Context()
defer cancel()
return provider.Resolve(ctx, req.Target(), req.UserInput)
}
// ServeRegistry serves the given registry as a plugin.
func ServeRegistry(registry config.ProviderRegistry) {
plugin.Serve(&plugin.ServeConfig{
HandshakeConfig: handshakeConfig,
Plugins: map[string]plugin.Plugin{
pluginName: &Plugin{
Impl: ®istryServer{registry: registry},
},
},
})
}