From 7d4d561290c4126b8017cba0e8f2cc62eaa85a48 Mon Sep 17 00:00:00 2001 From: Hans Moog <hm@mkjc.net> Date: Mon, 22 Jul 2019 19:30:55 +0200 Subject: [PATCH] Feat: added bool parameters to the parameter package --- packages/parameter/events.go | 11 +++++++++-- packages/parameter/parameter.go | 31 ++++++++++++++++++++++++++++++- packages/parameter/types.go | 7 +++++++ plugins/cli/cli.go | 4 ++++ plugins/cli/plugin.go | 13 ++++++++++++- 5 files changed, 62 insertions(+), 4 deletions(-) diff --git a/packages/parameter/events.go b/packages/parameter/events.go index 7de04ada..ad91b734 100644 --- a/packages/parameter/events.go +++ b/packages/parameter/events.go @@ -5,16 +5,23 @@ import ( ) var Events = struct { + AddBool *events.Event AddInt *events.Event AddString *events.Event }{ - events.NewEvent(intParameterCaller), - events.NewEvent(stringParameterCaller), + AddBool: events.NewEvent(boolParameterCaller), + AddInt: events.NewEvent(intParameterCaller), + AddString: events.NewEvent(stringParameterCaller), +} + +func boolParameterCaller(handler interface{}, params ...interface{}) { + handler.(func(*BoolParameter))(params[0].(*BoolParameter)) } func intParameterCaller(handler interface{}, params ...interface{}) { handler.(func(*IntParameter))(params[0].(*IntParameter)) } + func stringParameterCaller(handler interface{}, params ...interface{}) { handler.(func(*StringParameter))(params[0].(*StringParameter)) } diff --git a/packages/parameter/parameter.go b/packages/parameter/parameter.go index 8588e73a..2d180914 100644 --- a/packages/parameter/parameter.go +++ b/packages/parameter/parameter.go @@ -1,5 +1,34 @@ package parameter +var boolParameters = make(map[string]*BoolParameter) + +func AddBool(name string, defaultValue bool, description string) *BoolParameter { + if boolParameters[name] != nil { + panic("duplicate parameter - \"" + name + "\" was defined already") + } + + newParameter := &BoolParameter{ + Name: name, + DefaultValue: defaultValue, + Value: &defaultValue, + Description: description, + } + + boolParameters[name] = newParameter + + Events.AddBool.Trigger(newParameter) + + return newParameter +} + +func GetBool(name string) *BoolParameter { + return boolParameters[name] +} + +func GetBools() map[string]*BoolParameter { + return boolParameters +} + var intParameters = make(map[string]*IntParameter) func AddInt(name string, defaultValue int, description string) *IntParameter { @@ -32,7 +61,7 @@ func GetInts() map[string]*IntParameter { var stringParameters = make(map[string]*StringParameter) func AddString(name string, defaultValue string, description string) *StringParameter { - if intParameters[name] != nil { + if stringParameters[name] != nil { panic("duplicate parameter - \"" + name + "\" was defined already") } diff --git a/packages/parameter/types.go b/packages/parameter/types.go index 8a044680..92738a34 100644 --- a/packages/parameter/types.go +++ b/packages/parameter/types.go @@ -1,5 +1,12 @@ package parameter +type BoolParameter struct { + Name string + Value *bool + DefaultValue bool + Description string +} + type IntParameter struct { Name string Value *int diff --git a/plugins/cli/cli.go b/plugins/cli/cli.go index ddb29b6b..dc898c98 100644 --- a/plugins/cli/cli.go +++ b/plugins/cli/cli.go @@ -7,6 +7,10 @@ import ( "path/filepath" ) +func AddBoolParameter(p *bool, name string, usage string) { + flag.BoolVar(p, name, *p, usage) +} + func AddIntParameter(p *int, name string, usage string) { flag.IntVar(p, name, *p, usage) } diff --git a/plugins/cli/plugin.go b/plugins/cli/plugin.go index 0f5081d4..4e98e515 100644 --- a/plugins/cli/plugin.go +++ b/plugins/cli/plugin.go @@ -10,6 +10,12 @@ import ( "github.com/iotaledger/goshimmer/packages/parameter" ) +func onAddBoolParameter(param *parameter.BoolParameter) { + flagName := strings.Replace(strings.Replace(strings.ToLower(param.Name), "/", "-", 1), "_", "-", -1) + + AddBoolParameter(param.Value, flagName, param.Description) +} + func onAddIntParameter(param *parameter.IntParameter) { flagName := strings.Replace(strings.Replace(strings.ToLower(param.Name), "/", "-", 1), "_", "-", -1) @@ -23,6 +29,10 @@ func onAddStringParameter(param *parameter.StringParameter) { } func init() { + for _, param := range parameter.GetBools() { + onAddBoolParameter(param) + } + for _, param := range parameter.GetInts() { onAddIntParameter(param) } @@ -31,6 +41,7 @@ func init() { onAddStringParameter(param) } + parameter.Events.AddBool.Attach(events.NewClosure(onAddBoolParameter)) parameter.Events.AddInt.Attach(events.NewClosure(onAddIntParameter)) parameter.Events.AddString.Attach(events.NewClosure(onAddStringParameter)) @@ -49,7 +60,7 @@ func configure(ctx *node.Plugin) { fmt.Println(" \\ `--.| |_| | | | | . . || . . || |__ | |_/ /") fmt.Println(" `--. \\ _ | | | | |\\/| || |\\/| || __|| / ") fmt.Println(" /\\__/ / | | |_| |_| | | || | | || |___| |\\ \\ ") - fmt.Println(" \\____/\\_| |_/\\___/\\_| |_/\\_| |_/\\____/\\_| \\_| fullnode 1.0") + fmt.Println(" \\____/\\_| |_/\\___/\\_| |_/\\_| |_/\\____/\\_| \\_| fullnode 0.0.1") fmt.Println() ctx.Node.LogInfo("Node", "Loading plugins ...") -- GitLab