15 #ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_PUBSUB_SUBSCRIPTION_BUILDER_H
16 #define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_PUBSUB_SUBSCRIPTION_BUILDER_H
18 #include "google/cloud/pubsub/subscription.h"
19 #include "google/cloud/pubsub/topic.h"
20 #include "google/cloud/pubsub/version.h"
21 #include "google/cloud/internal/time_utils.h"
22 #include <google/protobuf/util/field_mask_util.h>
23 #include <google/pubsub/v1/pubsub.pb.h>
58 proto_.set_push_endpoint(std::move(v));
59 paths_.insert(
"push_endpoint");
67 std::string
const& value) & {
68 proto_.mutable_attributes()->insert(
69 google::protobuf::Map<std::string, std::string>::value_type(key,
71 paths_.insert(
"attributes");
75 std::string
const& value) && {
80 std::vector<std::pair<std::string, std::string>> attr) & {
81 google::protobuf::Map<std::string, std::string> attributes;
82 for (
auto& kv : attr) {
83 attributes[kv.first] = std::move(kv.second);
85 proto_.mutable_attributes()->swap(attributes);
86 paths_.insert(
"attributes");
90 std::vector<std::pair<std::string, std::string>> attr) && {
95 proto_.mutable_attributes()->clear();
96 paths_.insert(
"attributes");
104 std::string service_account_email) {
105 google::pubsub::v1::PushConfig::OidcToken proto;
106 proto.set_service_account_email(std::move(service_account_email));
111 std::string service_account_email, std::string audience) {
112 google::pubsub::v1::PushConfig::OidcToken proto;
113 proto.set_service_account_email(std::move(service_account_email));
114 proto.set_audience(std::move(audience));
119 google::pubsub::v1::PushConfig::OidcToken token) & {
120 *proto_.mutable_oidc_token() = std::move(token);
121 paths_.insert(
"oidc_token");
125 google::pubsub::v1::PushConfig::OidcToken token) && {
132 google::pubsub::v1::PushConfig proto_;
133 std::set<std::string> paths_;
152 *proto_.mutable_table() = std::move(full_path);
153 paths_.insert(
"table");
160 std::string
const& data_set_id,
161 std::string
const& table_id) & {
162 return set_table(project_id +
':' + data_set_id +
'.' + table_id
);
165 std::string
const& data_set_id,
166 std::string
const& table_id) && {
167 return std::move(
set_table(project_id
, data_set_id
, table_id
));
171 proto_.set_use_topic_schema(v);
172 paths_.insert(
"use_topic_schema");
180 proto_.set_write_metadata(v);
181 paths_.insert(
"write_metadata");
189 proto_.set_drop_unknown_fields(v);
190 paths_.insert(
"drop_unknown_fields");
200 google::pubsub::v1::BigQueryConfig proto_;
201 std::set<std::string> paths_;
238 proto_.set_ack_deadline_seconds(
static_cast<std::int32_t>(v.count()));
239 paths_.insert(
"ack_deadline_seconds");
247 proto_.set_retain_acked_messages(v);
248 paths_.insert(
"retain_acked_messages");
255 template <
typename Rep,
typename Period>
257 std::chrono::duration<Rep, Period> d) & {
258 *proto_.mutable_message_retention_duration() =
259 google::
cloud::internal::ToDurationProto(std::move(d));
260 paths_.insert(
"message_retention_duration");
263 template <
typename Rep,
typename Period>
265 std::chrono::duration<Rep, Period> d) && {
266 return std::move(set_message_retention_duration(d));
270 std::string
const& value) & {
272 google::protobuf::Map<std::string, std::string>::value_type;
273 proto_.mutable_labels()->insert(value_type(key, value));
274 paths_.insert(
"labels");
278 std::string
const& value) && {
283 std::vector<std::pair<std::string, std::string>> new_labels) & {
284 google::protobuf::Map<std::string, std::string> labels;
285 for (
auto& kv : new_labels) {
286 labels[kv.first] = std::move(kv.second);
288 proto_.mutable_labels()->swap(labels);
289 paths_.insert(
"labels");
293 std::vector<std::pair<std::string, std::string>> new_labels) && {
298 proto_.clear_labels();
299 paths_.insert(
"labels");
305 proto_.set_enable_message_ordering(v);
306 paths_.insert(
"enable_message_ordering");
314 google::pubsub::v1::ExpirationPolicy v) & {
315 *proto_.mutable_expiration_policy() = std::move(v);
316 paths_.insert(
"expiration_policy");
320 google::pubsub::v1::ExpirationPolicy v) && {
325 proto_.set_filter(std::move(v));
326 paths_.insert(
"filter");
334 google::pubsub::v1::DeadLetterPolicy v) & {
335 *proto_.mutable_dead_letter_policy() = std::move(v);
336 paths_.insert(
"dead_letter_policy");
340 google::pubsub::v1::DeadLetterPolicy v) && {
345 proto_.clear_dead_letter_policy();
346 paths_.insert(
"dead_letter_policy");
354 *proto_.mutable_retry_policy() = std::move(v);
355 paths_.insert(
"retry_policy");
363 proto_.clear_retry_policy();
364 paths_.insert(
"retry_policy");
372 proto_.set_enable_exactly_once_delivery(v);
373 paths_.insert(
"enable_exactly_once_delivery");
387 template <
typename Rep,
typename Period>
389 std::chrono::duration<Rep, Period> d) {
390 google::pubsub::v1::ExpirationPolicy result;
391 *result.mutable_ttl() =
392 google::
cloud::internal::ToDurationProto(std::move(d));
403 Topic const& dead_letter_topic, std::int32_t max_delivery_attempts = 0) {
404 google::pubsub::v1::DeadLetterPolicy result;
405 result.set_dead_letter_topic(dead_letter_topic
.FullName());
406 result.set_max_delivery_attempts(max_delivery_attempts);
416 template <
typename Rep1,
typename Period1,
typename Rep2,
typename Period2>
418 std::chrono::duration<Rep1, Period1> minimum_backoff,
419 std::chrono::duration<Rep2, Period2> maximum_backoff) {
420 google::pubsub::v1::RetryPolicy result;
421 *result.mutable_minimum_backoff() =
422 google::
cloud::internal::ToDurationProto(minimum_backoff);
423 *result.mutable_maximum_backoff() =
424 google::
cloud::internal::ToDurationProto(maximum_backoff);
429 google::pubsub::v1::Subscription proto_;
430 std::set<std::string> paths_;