|
38 | 38 | "iris.logger",
|
39 | 39 | "iris.rate",
|
40 | 40 | "iris.methodoverride",
|
| 41 | + "iris.errors.recover", |
41 | 42 | }
|
42 | 43 | )
|
43 | 44 |
|
@@ -111,20 +112,6 @@ type Handler = func(*Context)
|
111 | 112 | // See `Handler` for more.
|
112 | 113 | type Handlers = []Handler
|
113 | 114 |
|
114 |
| -// CopyHandlers returns a copy of "handlers" Handlers slice. |
115 |
| -func CopyHandlers(handlers []Handler) Handlers { |
116 |
| - handlersCp := make([]Handler, 0, len(handlers)) |
117 |
| - for _, handler := range handlers { |
118 |
| - if handler == nil { |
119 |
| - continue |
120 |
| - } |
121 |
| - |
122 |
| - handlersCp = append(handlersCp, handler) |
123 |
| - } |
124 |
| - |
125 |
| - return handlersCp |
126 |
| -} |
127 |
| - |
128 | 115 | func valueOf(v interface{}) reflect.Value {
|
129 | 116 | if val, ok := v.(reflect.Value); ok {
|
130 | 117 | return val
|
@@ -378,3 +365,50 @@ reg:
|
378 | 365 |
|
379 | 366 | return h1
|
380 | 367 | }
|
| 368 | + |
| 369 | +// CopyHandlers returns a copy of "handlers" Handlers slice. |
| 370 | +func CopyHandlers(handlers Handlers) Handlers { |
| 371 | + handlersCp := make(Handlers, 0, len(handlers)) |
| 372 | + for _, handler := range handlers { |
| 373 | + if handler == nil { |
| 374 | + continue |
| 375 | + } |
| 376 | + |
| 377 | + handlersCp = append(handlersCp, handler) |
| 378 | + } |
| 379 | + |
| 380 | + return handlersCp |
| 381 | +} |
| 382 | + |
| 383 | +// HandlerExists reports whether a handler exists in the "handlers" slice. |
| 384 | +func HandlerExists(handlers Handlers, handlerNameOrFunc any) bool { |
| 385 | + if handlerNameOrFunc == nil { |
| 386 | + return false |
| 387 | + } |
| 388 | + |
| 389 | + var matchHandler func(any) bool |
| 390 | + |
| 391 | + switch v := handlerNameOrFunc.(type) { |
| 392 | + case string: |
| 393 | + matchHandler = func(handler any) bool { |
| 394 | + return HandlerName(handler) == v |
| 395 | + } |
| 396 | + case Handler: |
| 397 | + handlerName := HandlerName(v) |
| 398 | + matchHandler = func(handler any) bool { |
| 399 | + return HandlerName(handler) == handlerName |
| 400 | + } |
| 401 | + default: |
| 402 | + matchHandler = func(handler any) bool { |
| 403 | + return reflect.TypeOf(handler) == reflect.TypeOf(v) |
| 404 | + } |
| 405 | + } |
| 406 | + |
| 407 | + for _, handler := range handlers { |
| 408 | + if matchHandler(handler) { |
| 409 | + return true |
| 410 | + } |
| 411 | + } |
| 412 | + |
| 413 | + return false |
| 414 | +} |
0 commit comments