From 14fa44a44993de67449347cf161f2abde7b5ec3c Mon Sep 17 00:00:00 2001 From: Chris Roberts Date: Wed, 9 Feb 2022 16:56:43 -0800 Subject: [PATCH] Update to use command info from sdk --- internal/cli/main.go | 8 ++--- internal/core/basis.go | 8 ++--- internal/core/mappers.go | 70 ++++------------------------------------ 3 files changed, 14 insertions(+), 72 deletions(-) diff --git a/internal/cli/main.go b/internal/cli/main.go index 6cc837410..3ec483e1e 100644 --- a/internal/cli/main.go +++ b/internal/cli/main.go @@ -17,10 +17,10 @@ import ( "github.com/mitchellh/cli" "github.com/mitchellh/go-glint" + "github.com/hashicorp/vagrant-plugin-sdk/internal-shared/protomappers" + "github.com/hashicorp/vagrant-plugin-sdk/proto/vagrant_plugin_sdk" "github.com/hashicorp/vagrant-plugin-sdk/terminal" - "github.com/hashicorp/vagrant/internal/core" "github.com/hashicorp/vagrant/internal/pkg/signalcontext" - "github.com/hashicorp/vagrant/internal/server/proto/vagrant_server" "github.com/hashicorp/vagrant/internal/version" ) @@ -196,12 +196,12 @@ func Commands( } func registerCommand( - c *vagrant_server.Job_Command, + c *vagrant_plugin_sdk.Command_CommandInfo, cmds map[string]cli.CommandFactory, base *baseCommand, parent *DynamicCommand, ) { - flgs, err := core.FlagOption(c.Flags) + flgs, err := protomappers.Flags(c.Flags) if err != nil { panic(err) } diff --git a/internal/core/basis.go b/internal/core/basis.go index 4a4c27cc3..1c70fc1fd 100644 --- a/internal/core/basis.go +++ b/internal/core/basis.go @@ -119,7 +119,7 @@ func NewBasis(ctx context.Context, opts ...BasisOption) (b *Basis, err error) { // Ensure any modifications to the basis are persisted b.Closer(func() error { return b.Save() }) - // Add in our local mappers + // Add in local mappers for _, fn := range Mappers { f, err := argmapper.NewFunc(fn, argmapper.Logger(dynamic.Logger), @@ -364,7 +364,7 @@ func (b *Basis) Host() (host core.Host, err error) { func (b *Basis) Init() (result *vagrant_server.Job_InitResult, err error) { b.logger.Debug("running init for basis") result = &vagrant_server.Job_InitResult{ - Commands: []*vagrant_server.Job_Command{}, + Commands: []*vagrant_plugin_sdk.Command_CommandInfo{}, } ctx := context.Background() @@ -376,7 +376,7 @@ func (b *Basis) Init() (result *vagrant_server.Job_InitResult, err error) { for _, c := range cmds { fn := c.Value.(component.Command).CommandInfoFunc() raw, err := b.callDynamicFunc(ctx, b.logger, fn, - (*[]*vagrant_server.Job_Command)(nil), + (*[]*vagrant_plugin_sdk.Command_CommandInfo)(nil), argmapper.Typed(b.ctx), ) @@ -385,7 +385,7 @@ func (b *Basis) Init() (result *vagrant_server.Job_InitResult, err error) { } result.Commands = append(result.Commands, - raw.([]*vagrant_server.Job_Command)...) + raw.([]*vagrant_plugin_sdk.Command_CommandInfo)...) } return diff --git a/internal/core/mappers.go b/internal/core/mappers.go index e4cfaebd4..365e92ecc 100644 --- a/internal/core/mappers.go +++ b/internal/core/mappers.go @@ -4,85 +4,27 @@ import ( "strings" "github.com/hashicorp/vagrant-plugin-sdk/component" + "github.com/hashicorp/vagrant-plugin-sdk/internal-shared/protomappers" "github.com/hashicorp/vagrant-plugin-sdk/proto/vagrant_plugin_sdk" - "github.com/hashicorp/vagrant/internal/server/proto/vagrant_server" ) var Mappers = []interface{}{ - CommandArgToMap, - FlagOption, JobCommandProto, - OptionFlagProto, } -func JobCommandProto(c *component.CommandInfo) []*vagrant_server.Job_Command { +func JobCommandProto(c *component.CommandInfo) []*vagrant_plugin_sdk.Command_CommandInfo { return jobCommandProto(c, []string{}) } -func FlagOption(input []*vagrant_server.Job_Flag) (opt component.CommandFlags, err error) { - opt = make([]*component.CommandFlag, len(input)) - - for i, f := range input { - opt[i] = &component.CommandFlag{ - LongName: f.LongName, - ShortName: f.ShortName, - Description: f.Description, - DefaultValue: f.DefaultValue, - } - switch f.Type { - case vagrant_server.Job_Flag_STRING: - opt[i].Type = component.FlagString - case vagrant_server.Job_Flag_BOOL: - opt[i].Type = component.FlagBool - } - } - return -} - -func CommandArgToMap(input *vagrant_plugin_sdk.Command_Arguments) (map[string]interface{}, error) { - result := make(map[string]interface{}) - for _, flg := range input.Flags { - switch flg.Type { - case vagrant_plugin_sdk.Command_Arguments_Flag_STRING: - result[flg.Name] = flg.GetString_() - case vagrant_plugin_sdk.Command_Arguments_Flag_BOOL: - result[flg.Name] = flg.GetBool() - } - } - return result, nil -} - -func OptionFlagProto(input component.CommandFlags) []*vagrant_server.Job_Flag { - output := make([]*vagrant_server.Job_Flag, len(input)) - - for i, f := range input { - output[i] = &vagrant_server.Job_Flag{ - LongName: f.LongName, - ShortName: f.ShortName, - Description: f.Description, - DefaultValue: f.DefaultValue, - } - switch f.Type { - case component.FlagBool: - output[i].Type = vagrant_server.Job_Flag_BOOL - case component.FlagString: - output[i].Type = vagrant_server.Job_Flag_STRING - default: - panic("unsupported flag type - " + f.Type.String()) - } - } - - return output -} - -func jobCommandProto(c *component.CommandInfo, names []string) []*vagrant_server.Job_Command { +func jobCommandProto(c *component.CommandInfo, names []string) []*vagrant_plugin_sdk.Command_CommandInfo { names = append(names, c.Name) - cmds := []*vagrant_server.Job_Command{ + flgs, _ := protomappers.FlagsProto(c.Flags) + cmds := []*vagrant_plugin_sdk.Command_CommandInfo{ { Name: strings.Join(names, " "), Synopsis: c.Synopsis, Help: c.Help, - Flags: OptionFlagProto(c.Flags), + Flags: flgs, }, }