| @@ -318,6 +318,13 @@ func (t *CommandTrie[TCtx, TRet]) Add(fn any, prefixWords ...string) error { | |||||
| return t.anyTrie.Add(fn, prefixWords...) | return t.anyTrie.Add(fn, prefixWords...) | ||||
| } | } | ||||
| func (t *CommandTrie[TCtx, TRet]) MustAdd(fn any, prefixWords ...string) { | |||||
| err := t.anyTrie.Add(fn, prefixWords...) | |||||
| if err != nil { | |||||
| panic(err.Error()) | |||||
| } | |||||
| } | |||||
| func (t *CommandTrie[TCtx, TRet]) Execute(ctx TCtx, cmdWords ...string) (TRet, error) { | func (t *CommandTrie[TCtx, TRet]) Execute(ctx TCtx, cmdWords ...string) (TRet, error) { | ||||
| retValues, err := t.anyTrie.Execute(ctx, cmdWords...) | retValues, err := t.anyTrie.Execute(ctx, cmdWords...) | ||||
| if err != nil { | if err != nil { | ||||
| @@ -325,6 +332,11 @@ func (t *CommandTrie[TCtx, TRet]) Execute(ctx TCtx, cmdWords ...string) (TRet, e | |||||
| return defRet, err | return defRet, err | ||||
| } | } | ||||
| if retValues[0].Kind() == reflect.Interface && retValues[0].IsNil() { | |||||
| var ret TRet | |||||
| return ret, nil | |||||
| } | |||||
| return retValues[0].Interface().(TRet), nil | return retValues[0].Interface().(TRet), nil | ||||
| } | } | ||||
| @@ -342,6 +354,13 @@ func (t *VoidCommandTrie[TCtx]) Add(fn any, prefixWords ...string) error { | |||||
| return t.anyTrie.Add(fn, prefixWords...) | return t.anyTrie.Add(fn, prefixWords...) | ||||
| } | } | ||||
| func (t *VoidCommandTrie[TCtx]) MustAdd(fn any, prefixWords ...string) { | |||||
| err := t.anyTrie.Add(fn, prefixWords...) | |||||
| if err != nil { | |||||
| panic(err.Error()) | |||||
| } | |||||
| } | |||||
| func (t *VoidCommandTrie[TCtx]) Execute(ctx TCtx, cmdWords ...string) error { | func (t *VoidCommandTrie[TCtx]) Execute(ctx TCtx, cmdWords ...string) error { | ||||
| _, err := t.anyTrie.Execute(ctx, cmdWords...) | _, err := t.anyTrie.Execute(ctx, cmdWords...) | ||||
| return err | return err | ||||
| @@ -361,6 +380,13 @@ func (t *StaticCommandTrie[TRet]) Add(fn any, prefixWords ...string) error { | |||||
| return t.anyTrie.Add(fn, prefixWords...) | return t.anyTrie.Add(fn, prefixWords...) | ||||
| } | } | ||||
| func (t *StaticCommandTrie[TRet]) MustAdd(fn any, prefixWords ...string) { | |||||
| err := t.anyTrie.Add(fn, prefixWords...) | |||||
| if err != nil { | |||||
| panic(err.Error()) | |||||
| } | |||||
| } | |||||
| func (t *StaticCommandTrie[TRet]) Execute(cmdWords ...string) (TRet, error) { | func (t *StaticCommandTrie[TRet]) Execute(cmdWords ...string) (TRet, error) { | ||||
| retValues, err := t.anyTrie.Execute(nil, cmdWords...) | retValues, err := t.anyTrie.Execute(nil, cmdWords...) | ||||
| if err != nil { | if err != nil { | ||||
| @@ -368,5 +394,10 @@ func (t *StaticCommandTrie[TRet]) Execute(cmdWords ...string) (TRet, error) { | |||||
| return defRet, err | return defRet, err | ||||
| } | } | ||||
| if retValues[0].Kind() == reflect.Interface && retValues[0].IsNil() { | |||||
| var ret TRet | |||||
| return ret, nil | |||||
| } | |||||
| return retValues[0].Interface().(TRet), nil | return retValues[0].Interface().(TRet), nil | ||||
| } | } | ||||