@@ -29,7 +29,6 @@ import (
2929 "github.com/Shopify/sarama"
3030 "github.com/kelseyhightower/envconfig"
3131 "github.com/kubernetes/helm/pkg/strvals"
32- "github.com/mitchellh/mapstructure"
3332 "gopkg.in/guregu/null.v3"
3433
3534 "go.k6.io/k6/lib/types"
@@ -55,12 +54,6 @@ type Config struct {
5554 InfluxDBConfig influxdbConfig `json:"influxdb"`
5655}
5756
58- // config is a duplicate of ConfigFields as we can not mapstructure.Decode into
59- // null types so we duplicate the struct with primitive types to Decode into
60- type config struct {
61- Brokers []string `mapstructure:"brokers"`
62- }
63-
6457// NewConfig creates a new Config instance with default values for some fields.
6558func NewConfig () Config {
6659 return Config {
@@ -186,29 +179,38 @@ func ParseArg(arg string) (Config, error) {
186179 delete (params , "format" )
187180 }
188181
189- var cfg config
190182 if v , ok := params ["brokers" ].(string ); ok {
191- params ["brokers" ] = []string {v }
183+ c .Brokers = []string {v }
184+
185+ delete (params , "brokers" )
192186 }
193- err = mapstructure . Decode ( params , & cfg )
194- if err != nil {
195- return c , err
187+ if v , ok := params [ "brokers" ].([] interface {}); ok {
188+ c . Brokers = interfaceSliceToStringSlice ( v )
189+ delete ( params , "brokers" )
196190 }
197- delete (params , "brokers" )
198-
199- c .Brokers = cfg .Brokers
200191
201192 if len (params ) > 0 {
202- var s string
203- for k , v := range params {
204- s += fmt .Sprintf ("%s=%v," , k , v )
205- }
206- s = s [:len (s )- 1 ]
207- return c , errors .New ("Unknown or unparsed options '" + s + "'" )
193+ return c , errors .New ("Unknown or unparsed options '" + mapToString (params ) + "'" )
208194 }
209195 return c , nil
210196}
211197
198+ func mapToString (m map [string ]interface {}) string {
199+ var s string
200+ for k , v := range m {
201+ s += fmt .Sprintf ("%s=%v," , k , v )
202+ }
203+ return s [:len (s )- 1 ]
204+ }
205+
206+ func interfaceSliceToStringSlice (input []interface {}) []string {
207+ output := make ([]string , len (input ))
208+ for i , v := range input {
209+ output [i ] = fmt .Sprintf ("%v" , v )
210+ }
211+ return output
212+ }
213+
212214// GetConsolidatedConfig combines {default config values + JSON config +
213215// environment vars + arg config values}, and returns the final result.
214216func GetConsolidatedConfig (jsonRawConf json.RawMessage , env map [string ]string , arg string ) (Config , error ) {
0 commit comments