MCPcopy Index your code
hub / github.com/koding/kite / ServeKite

Method ServeKite

method.go:207–277  ·  view source on GitHub ↗
(r *Request)

Source from the content-addressed store, hash-verified

205}
206
207func (m *Method) ServeKite(r *Request) (interface{}, error) {
208 var firstResp interface{}
209 var resp interface{}
210 var err error
211
212 // first execute preHandlers. make a copy of the handler to avoid race
213 // conditions
214 m.mu.Lock()
215 preHandlers := make([]Handler, len(m.preHandlers))
216 for i, handler := range m.preHandlers {
217 preHandlers[i] = handler
218
219 }
220 m.mu.Unlock()
221
222 for _, handler := range preHandlers {
223 resp, err = handler.ServeKite(r)
224 if err != nil {
225 return m.final(r, nil, err)
226 }
227
228 if m.handling == ReturnFirst && resp != nil && firstResp == nil {
229 firstResp = resp
230 }
231 }
232
233 preHandlers = nil // garbage collect it
234
235 // now call our base handler
236 resp, err = m.handler.ServeKite(r)
237 if err != nil {
238 return m.final(r, nil, err)
239 }
240
241 // also save it dependent on the handling mechanism
242 methodResp := resp
243
244 if m.handling == ReturnFirst && resp != nil && firstResp == nil {
245 firstResp = resp
246 }
247
248 // and finally return our postHandlers
249 m.mu.Lock()
250 postHandlers := make([]Handler, len(m.postHandlers))
251 for i, handler := range m.postHandlers {
252 postHandlers[i] = handler
253 }
254 m.mu.Unlock()
255
256 for _, handler := range postHandlers {
257 resp, err = handler.ServeKite(r)
258 if err != nil {
259 return m.final(r, nil, err)
260 }
261
262 if m.handling == ReturnFirst && resp != nil && firstResp == nil {
263 firstResp = resp
264 }

Callers

nothing calls this directly

Calls 2

finalMethod · 0.95
ServeKiteMethod · 0.65

Tested by

no test coverage detected