-
Notifications
You must be signed in to change notification settings - Fork 465
/
concurrency.go
34 lines (28 loc) · 1.06 KB
/
concurrency.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
// ------------------------------------------------------------
// Copyright (c) Microsoft Corporation and Dapr Contributors.
// Licensed under the MIT License.
// ------------------------------------------------------------
package pubsub
import "fmt"
// ConcurrencyMode is a pub/sub metadata setting that allows to specify whether messages are delivered in a serial or parallel execution.
type ConcurrencyMode string
const (
// ConcurrencyKey is the metadata key name for ConcurrencyMode.
ConcurrencyKey = "concurrencyMode"
Single ConcurrencyMode = "single"
Parallel ConcurrencyMode = "parallel"
)
// Concurrency takes a metadata object and returns the ConcurrencyMode configured. Default is Parallel.
func Concurrency(metadata map[string]string) (ConcurrencyMode, error) {
if val, ok := metadata[ConcurrencyKey]; ok && val != "" {
switch val {
case string(Single):
return Single, nil
case string(Parallel):
return Parallel, nil
default:
return "", fmt.Errorf("invalid %s %s", ConcurrencyKey, val)
}
}
return Parallel, nil
}