MCPcopy Create free account
hub / github.com/kataras/iris / buildMeta

Method buildMeta

context/context_func.go:51–120  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

49}
50
51func (f *Func) buildMeta() {
52 switch fn := f.Raw.(type) {
53 case Handler:
54 f.Meta = &FuncMeta{Handler: fn}
55 return
56 // case func(*Context):
57 // f.Meta = &FuncMeta{Handler: fn}
58 // return
59 case func(*Context) error:
60 f.Meta = &FuncMeta{HandlerWithErr: fn}
61 return
62 case func():
63 f.Meta = &FuncMeta{RawFunc: fn}
64 return
65 case func() error:
66 f.Meta = &FuncMeta{RawFuncWithErr: fn}
67 return
68 case func(...interface{}):
69 f.Meta = &FuncMeta{RawFuncArgs: fn}
70 return
71 case func(...interface{}) error:
72 f.Meta = &FuncMeta{RawFuncArgsWithErr: fn}
73 return
74 }
75
76 fn := f.Raw
77
78 meta := FuncMeta{}
79 if val, ok := fn.(reflect.Value); ok {
80 meta.Value = val
81 } else {
82 meta.Value = reflect.ValueOf(fn)
83 }
84
85 meta.Type = meta.Value.Type()
86
87 if meta.Type.Kind() != reflect.Func {
88 return
89 }
90
91 meta.ExpectedArgumentsLength = meta.Type.NumIn()
92
93 skipInputs := len(meta.PersistenceInputs)
94 if meta.ExpectedArgumentsLength > skipInputs {
95 meta.AcceptsContext = isContext(meta.Type.In(skipInputs))
96 }
97
98 if numOut := meta.Type.NumOut(); numOut > 0 {
99 // error should be the last output.
100 if isError(meta.Type.Out(numOut - 1)) {
101 meta.ReturnsError = true
102 }
103 }
104
105 persistenceArgs := f.PersistenceArgs
106 if len(persistenceArgs) > 0 {
107 inputs := make([]reflect.Value, 0, len(persistenceArgs))
108 for _, arg := range persistenceArgs {

Callers

nothing calls this directly

Calls 3

TypeMethod · 0.80
isContextFunction · 0.70
isErrorFunction · 0.70

Tested by

no test coverage detected