/* Copyright 2021 The Dapr Authors Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the 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 }