template for easier plugin

This commit is contained in:
Boshi Lian 2022-07-04 13:49:43 +00:00
parent 5dda30365e
commit 8d56673982
3 changed files with 91 additions and 62 deletions

53
libplugin/template.go Normal file
View file

@ -0,0 +1,53 @@
package libplugin
import (
"fmt"
"os"
"github.com/urfave/cli/v2"
)
type PluginTemplate struct {
Name string
Usage string
Flags []cli.Flag
CreateConfig func(c *cli.Context) (*SshPiperPluginConfig, error)
}
func CreateAndRunPluginTemplate(t *PluginTemplate) {
app := &cli.App{
Name: t.Name,
Usage: t.Usage,
Flags: t.Flags,
HideHelpCommand: true,
HideHelp: true,
Writer: os.Stderr,
ErrWriter: os.Stderr,
Action: func(c *cli.Context) error {
if t == nil {
return fmt.Errorf("plugin template is nil")
}
if t.CreateConfig == nil {
return fmt.Errorf("plugin template create config is nil")
}
config, err := t.CreateConfig(c)
if err != nil {
return err
}
p, err := NewFromStdio(*config)
if err != nil {
return err
}
ConfigStdioLogrus(p, nil)
return p.Serve()
},
}
if err := app.Run(os.Args); err != nil {
fmt.Fprintf(os.Stderr, "cannot start plugin: %v\n", err)
}
}