1
0
Fork 0
mirror of https://github.com/diamondburned/arikawa.git synced 2024-07-15 22:55:17 +00:00

bot: Clarify unexported *Context field

This commit is contained in:
diamondburned 2021-06-22 16:10:21 -07:00
parent 917459611d
commit 17dbccccc3
2 changed files with 29 additions and 13 deletions

View file

@ -16,6 +16,25 @@ import (
"github.com/diamondburned/arikawa/v3/utils/handler" "github.com/diamondburned/arikawa/v3/utils/handler"
) )
type testUnexportedCtx struct {
ctx *Context
}
func TestUnexportedCtx(t *testing.T) {
s := &state.State{
Cabinet: store.NoopCabinet,
}
_, err := New(s, &testUnexportedCtx{})
if err == nil {
t.Fatal("New returned unexpected nil error")
}
if !strings.Contains(err.Error(), "no exported field with *bot.Context found") {
t.Fatal("unexpected New error:", err)
}
}
type testc struct { type testc struct {
Ctx *Context Ctx *Context
Return chan interface{} Return chan interface{}

View file

@ -14,12 +14,13 @@ var (
typeMessageCreate = reflect.TypeOf((*gateway.MessageCreateEvent)(nil)) typeMessageCreate = reflect.TypeOf((*gateway.MessageCreateEvent)(nil))
typeMessageUpdate = reflect.TypeOf((*gateway.MessageUpdateEvent)(nil)) typeMessageUpdate = reflect.TypeOf((*gateway.MessageUpdateEvent)(nil))
typeIError = reflect.TypeOf((*error)(nil)).Elem() typeContextPtr = reflect.TypeOf((*Context)(nil))
typeIManP = reflect.TypeOf((*ManualParser)(nil)).Elem() typeIError = reflect.TypeOf((*error)(nil)).Elem()
typeICusP = reflect.TypeOf((*CustomParser)(nil)).Elem() typeIManP = reflect.TypeOf((*ManualParser)(nil)).Elem()
typeIParser = reflect.TypeOf((*Parser)(nil)).Elem() typeICusP = reflect.TypeOf((*CustomParser)(nil)).Elem()
typeIUsager = reflect.TypeOf((*Usager)(nil)).Elem() typeIParser = reflect.TypeOf((*Parser)(nil)).Elem()
typeSetupFn = methodType((*CanSetup)(nil), "Setup") typeIUsager = reflect.TypeOf((*Usager)(nil)).Elem()
typeSetupFn = methodType((*CanSetup)(nil), "Setup")
) )
func methodType(iface interface{}, name string) reflect.Type { func methodType(iface interface{}, name string) reflect.Type {
@ -351,14 +352,10 @@ func (sub *Subcommand) InitCommands(ctx *Context) error {
} }
func (sub *Subcommand) fillStruct(ctx *Context) error { func (sub *Subcommand) fillStruct(ctx *Context) error {
for i := 0; i < sub.cmdValue.NumField(); i++ { for i := 0; i < sub.cmdType.NumField(); i++ {
field := sub.cmdValue.Field(i) field := sub.cmdValue.Field(i)
if !field.CanSet() || !field.CanInterface() { if !field.CanSet() || field.Type() != typeContextPtr {
continue
}
if _, ok := field.Interface().(*Context); !ok {
continue continue
} }
@ -366,7 +363,7 @@ func (sub *Subcommand) fillStruct(ctx *Context) error {
return nil return nil
} }
return errors.New("no fields with *bot.Context found") return errors.New("no exported field with *bot.Context found")
} }
func (sub *Subcommand) parseCommands() error { func (sub *Subcommand) parseCommands() error {