@@ -2,6 +2,7 @@ package dew
2
2
3
3
import (
4
4
"context"
5
+ "fmt"
5
6
"reflect"
6
7
"sync"
7
8
)
@@ -166,16 +167,24 @@ func (mx *mux) updateHandler(m middlewareType) {
166
167
}
167
168
168
169
// Register adds the handler to the mux for the given command type.
169
- func (mx * mux ) Register (handler any ) {
170
- hdlTyp := reflect .TypeOf (handler )
171
- for i := 0 ; i < hdlTyp .NumMethod (); i ++ {
172
- mtdTyp := hdlTyp .Method (i )
173
- if isHandlerMethod (mtdTyp ) {
174
- cmdTyp := mtdTyp .Type .In (2 ).Elem ()
175
- if cmdTyp .Implements (reflect .TypeOf ((* Action )(nil )).Elem ()) {
176
- mx .addHandler (cmdTyp , reflect .ValueOf (handler ).Method (i ).Interface ())
177
- } else if cmdTyp .Implements (reflect .TypeOf ((* QueryAction )(nil )).Elem ()) {
178
- mx .addHandler (cmdTyp , reflect .ValueOf (handler ).Method (i ).Interface ())
170
+ func (mx * mux ) Register (handler interface {}) {
171
+ val := reflect .ValueOf (handler )
172
+ typ := val .Type ()
173
+
174
+ // Convert to pointer if not already
175
+ if typ .Kind () != reflect .Ptr {
176
+ val = reflect .New (typ )
177
+ val .Elem ().Set (reflect .ValueOf (handler ))
178
+ typ = val .Type ()
179
+ }
180
+
181
+ for i := 0 ; i < typ .NumMethod (); i ++ {
182
+ method := typ .Method (i )
183
+ if isHandlerMethod (method ) {
184
+ cmdType := method .Type .In (2 ).Elem ()
185
+ if cmdType .Implements (reflect .TypeOf ((* Action )(nil )).Elem ()) ||
186
+ cmdType .Implements (reflect .TypeOf ((* QueryAction )(nil )).Elem ()) {
187
+ mx .addHandler (cmdType , val .Method (i ).Interface ())
179
188
}
180
189
}
181
190
}
@@ -187,6 +196,7 @@ func (mx *mux) setupHandler() {
187
196
mx .updateHandler (mQuery )
188
197
}
189
198
if mx .mHandlers [mDispatch ] == nil {
199
+ println ("setupHandler" )
190
200
mx .updateHandler (mDispatch )
191
201
}
192
202
if mx .parent != nil {
@@ -195,6 +205,7 @@ func (mx *mux) setupHandler() {
195
205
}
196
206
197
207
func (mx * mux ) addHandler (t reflect.Type , h any ) {
208
+ println (fmt .Sprintf ("addHandler: %v" , t ))
198
209
mx .entries .Store (t , & handler {handler : h , mux : mx })
199
210
}
200
211
0 commit comments