Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

docs(pubsub): add unwrapped subscription sample #12090

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 48 additions & 4 deletions google/cloud/pubsub/samples/samples.cc
Original file line number Diff line number Diff line change
Expand Up @@ -374,6 +374,33 @@ void CreatePushSubscription(
(std::move(client), argv.at(0), argv.at(1), argv.at(2), argv.at(3));
}

void CreateUnwrappedPushSubscription(
google::cloud::pubsub::SubscriptionAdminClient client,
std::vector<std::string> const& argv) {
//! [START pubsub_create_unwrapped_push_subscription]
namespace pubsub = ::google::cloud::pubsub;
[](pubsub::SubscriptionAdminClient client, std::string const& project_id,
std::string const& topic_id, std::string const& subscription_id,
std::string const& endpoint) {
auto sub = client.CreateSubscription(
pubsub::Topic(project_id, std::move(topic_id)),
pubsub::Subscription(project_id, std::move(subscription_id)),
pubsub::SubscriptionBuilder{}.set_push_config(
pubsub::PushConfigBuilder{}.set_push_endpoint(endpoint).set_wrapper(
pubsub::PushConfigBuilder::MakeNoWrapper(true))));
if (sub.status().code() == google::cloud::StatusCode::kAlreadyExists) {
std::cout << "The subscription already exists\n";
return;
}
if (!sub) throw std::move(sub).status();
alevenberg marked this conversation as resolved.
Show resolved Hide resolved

std::cout << "The subscription was successfully created: "
<< sub->DebugString() << "\n";
}
//! [END pubsub_create_unwrapped_push_subscription]
(std::move(client), argv.at(0), argv.at(1), argv.at(2), argv.at(3));
}

void CreateBigQuerySubscription(
google::cloud::pubsub::SubscriptionAdminClient client,
std::vector<std::string> const& argv) {
Expand All @@ -387,11 +414,13 @@ void CreateBigQuerySubscription(
pubsub::Subscription(project_id, std::move(subscription_id)),
pubsub::SubscriptionBuilder{}.set_bigquery_config(
pubsub::BigQueryConfigBuilder{}.set_table(table_id)));
if (sub.status().code() == google::cloud::StatusCode::kAlreadyExists) {
std::cout << "The subscription already exists\n";
return;
if (!sub) {
if (sub.status().code() == google::cloud::StatusCode::kAlreadyExists) {
std::cout << "The subscription already exists\n";
return;
}
throw std::move(sub).status();
}
if (!sub) throw std::move(sub).status();

std::cout << "The subscription was successfully created: "
<< sub->DebugString() << "\n";
Expand Down Expand Up @@ -2326,6 +2355,7 @@ void AutoRun(std::vector<std::string> const& argv) {
auto const exactly_once_subscription_id = RandomSubscriptionId(generator);
auto const filtered_subscription_id = RandomSubscriptionId(generator);
auto const push_subscription_id = RandomSubscriptionId(generator);
auto const unwrapped_push_subscription_id = RandomSubscriptionId(generator);
auto const bigquery_subscription_id = RandomSubscriptionId(generator);
auto const ordering_subscription_id = RandomSubscriptionId(generator);
auto const ordering_topic_id = "ordering-" + RandomTopicId(generator);
Expand Down Expand Up @@ -2431,6 +2461,12 @@ void AutoRun(std::vector<std::string> const& argv) {
subscription_admin_client,
{project_id, topic_id, push_subscription_id, endpoint1});

std::cout << "\nRunning CreateUnwrappedPushSubscription() sample [3]"
<< std::endl;
CreateUnwrappedPushSubscription(
subscription_admin_client,
{project_id, topic_id, unwrapped_push_subscription_id, endpoint1});

std::cout << "\nRunning CreateOrderingSubscription() sample" << std::endl;
CreateOrderingSubscription(
subscription_admin_client,
Expand Down Expand Up @@ -2658,6 +2694,10 @@ void AutoRun(std::vector<std::string> const& argv) {
DeleteSubscription(subscription_admin_client,
{project_id, bigquery_subscription_id});

std::cout << "\nRunning DeleteSubscription() sample [8] " << std::endl;
DeleteSubscription(subscription_admin_client,
{project_id, unwrapped_push_subscription_id});

std::cout << "\nRunning DeleteTopic() sample [1]" << std::endl;
DeleteTopic(topic_admin_client, {project_id, dead_letter_topic_id});

Expand Down Expand Up @@ -2716,6 +2756,10 @@ int main(int argc, char* argv[]) { // NOLINT(bugprone-exception-escape)
"create-push-subscription",
{"project-id", "topic-id", "subscription-id", "endpoint"},
CreatePushSubscription),
CreateSubscriptionAdminCommand(
"create-unwrapped-push-subscription",
{"project-id", "topic-id", "subscription-id", "endpoint"},
CreateUnwrappedPushSubscription),
CreateSubscriptionAdminCommand(
"create-bigquery-subscription",
{"project-id", "topic-id", "subscription-id", "table-id"},
Expand Down
18 changes: 18 additions & 0 deletions google/cloud/pubsub/subscription_builder.h
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,24 @@ class PushConfigBuilder {
google::pubsub::v1::PushConfig::OidcToken token) && {
return std::move(set_authentication(std::move(token)));
}

static google::pubsub::v1::PushConfig::NoWrapper MakeNoWrapper(
bool write_metadata) {
google::pubsub::v1::PushConfig::NoWrapper proto;
proto.set_write_metadata(std::move(write_metadata));
return proto;
}

PushConfigBuilder& set_wrapper(
google::pubsub::v1::PushConfig::NoWrapper wrapper) & {
*proto_.mutable_no_wrapper() = std::move(wrapper);
paths_.insert("no_wrapper");
return *this;
}
PushConfigBuilder&& set_wrapper(
google::pubsub::v1::PushConfig::NoWrapper wrapper) && {
return std::move(set_wrapper(std::move(wrapper)));
}
///@}

private:
Expand Down
10 changes: 10 additions & 0 deletions google/cloud/pubsub/subscription_builder_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,16 @@ TEST(SubscriptionBuilder, MakeOidcTokenWithAudience) {
EXPECT_THAT(actual, IsProtoEqual(expected));
}

TEST(SubscriptionBuilder, MakeNoWrapper) {
auto const actual = PushConfigBuilder::MakeNoWrapper(true);
google::pubsub::v1::PushConfig::NoWrapper expected;
std::string const text = R"pb(
write_metadata: true
)pb";
ASSERT_TRUE(TextFormat::ParseFromString(text, &expected));
EXPECT_THAT(actual, IsProtoEqual(expected));
}

TEST(SubscriptionBuilder, Empty) {
auto const actual = PushConfigBuilder().BuildModifyPushConfig(
Subscription("test-project", "test-subscription"));
Expand Down