| 78 | } |
| 79 | |
| 80 | func funcToHandler(ctx context.Context, f reflect.Value) Handler { |
| 81 | t, err := checkSignature(ctx, f.Type(), |
| 82 | []reflect.Type{contextType, nil}, |
| 83 | []reflect.Type{errorType}, |
| 84 | ) |
| 85 | if err != nil { |
| 86 | log.F(ctx, true, "Checking handler signature. Error: %v", err) |
| 87 | } |
| 88 | return func(ctx context.Context, event interface{}) error { |
| 89 | args := []reflect.Value{ |
| 90 | reflect.ValueOf(ctx), |
| 91 | safeValue(event, t), |
| 92 | } |
| 93 | if !args[1].Type().AssignableTo(t) { |
| 94 | return log.Errf(ctx, nil, "Invalid event type: %v. Expected: %v", args[1].Type(), t) |
| 95 | } |
| 96 | result := f.Call(args) |
| 97 | if !result[0].IsNil() { |
| 98 | return fault.From(result[0].Interface()) |
| 99 | } |
| 100 | return nil |
| 101 | } |
| 102 | } |
| 103 | |
| 104 | func funcToProducer(ctx context.Context, f reflect.Value) Producer { |
| 105 | _, err := checkSignature(ctx, f.Type(), |