-
Notifications
You must be signed in to change notification settings - Fork 0
/
resolver.go
52 lines (43 loc) · 1.33 KB
/
resolver.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package rack
import "errors"
type (
// Resolver represents an event processor resolver
Resolver interface {
Resolve(payload []byte) (Processor, error)
}
resolverFunc func([]byte) (Processor, error)
)
var (
// ErrUnsupportedEventType indicates that the supplied event payload is not supported
ErrUnsupportedEventType = errors.New("unsupported event type")
defaultResolver = ResolveConditional(
APIGatewayProxyEventProcessor,
APIGatewayV2HTTPEventProcessor,
ALBTargetGroupEventProcessor,
)
)
// ResolveStatic returns a new static event processor resolver
// The supplied processor will be invoked for marshal/unmarshal
// operations, regardless of the incoming payload.
func ResolveStatic(p Processor) Resolver {
return resolverFunc(func([]byte) (Processor, error) {
return p, nil
})
}
// ResolveConditional returns a new conditional event processor resolver
// The first applicable processor will be returned, based on the
// incoming payload.
func ResolveConditional(p ...Processor) Resolver {
return resolverFunc(func(payload []byte) (Processor, error) {
for _, pp := range p {
if pp.CanProcess(payload) {
return pp, nil
}
}
return nil, ErrUnsupportedEventType
})
}
// Resolve resolves a resolver for the specified payload
func (r resolverFunc) Resolve(payload []byte) (Processor, error) {
return r(payload)
}