2017-08-27 17:46:04 +02:00
|
|
|
package methodfunc
|
|
|
|
|
|
|
|
import (
|
|
|
|
"reflect"
|
2017-09-15 14:05:35 +02:00
|
|
|
|
|
|
|
"github.com/kataras/golog"
|
|
|
|
"github.com/kataras/iris/context"
|
2017-08-27 17:46:04 +02:00
|
|
|
)
|
|
|
|
|
|
|
|
// MethodFunc the handler function.
|
|
|
|
type MethodFunc struct {
|
|
|
|
FuncInfo
|
2017-09-15 14:05:35 +02:00
|
|
|
// MethodCall fires the actual handler.
|
|
|
|
// The "ctx" is the current context, helps us to get any path parameter's values.
|
|
|
|
//
|
|
|
|
// The "f" is the controller's function which is responsible
|
|
|
|
// for that request for this http method.
|
|
|
|
// That function can accept one parameter.
|
|
|
|
//
|
|
|
|
// The default callers (and the only one for now)
|
|
|
|
// are pre-calculated by the framework.
|
|
|
|
MethodCall func(ctx context.Context, f reflect.Value)
|
|
|
|
RelPath string
|
2017-08-27 17:46:04 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
// Resolve returns all the method funcs
|
|
|
|
// necessary information and actions to
|
|
|
|
// perform the request.
|
|
|
|
func Resolve(typ reflect.Type) (methodFuncs []MethodFunc) {
|
|
|
|
infos := fetchInfos(typ)
|
|
|
|
for _, info := range infos {
|
2017-09-15 14:05:35 +02:00
|
|
|
parser := newFuncParser(info)
|
|
|
|
a, err := parser.parse()
|
|
|
|
if err != nil {
|
|
|
|
golog.Errorf("MVC: %s\n", err)
|
2017-08-27 17:46:04 +02:00
|
|
|
continue
|
|
|
|
}
|
|
|
|
methodFunc := MethodFunc{
|
2017-09-15 14:05:35 +02:00
|
|
|
RelPath: a.relPath,
|
2017-08-27 17:46:04 +02:00
|
|
|
FuncInfo: info,
|
2017-09-15 14:05:35 +02:00
|
|
|
MethodCall: buildMethodCall(a),
|
2017-08-27 17:46:04 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
methodFuncs = append(methodFuncs, methodFunc)
|
|
|
|
}
|
|
|
|
|
|
|
|
return
|
|
|
|
}
|