diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 000000000..5f530786f
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,2 @@
+/.gitattributes export-ignore
+/tests export-ignore
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 000000000..892519578
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+.idea
+vendor
+composer.lock
\ No newline at end of file
diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 000000000..0443c0345
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,3 @@
+## 0.1.0
+
+* Initial release with support for V0_1 of Google Ads API.
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 000000000..939e5341e
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,28 @@
+# How to Contribute
+
+We'd love to accept your patches and contributions to this project. There are
+just a few small guidelines you need to follow.
+
+## Contributor License Agreement
+
+Contributions to this project must be accompanied by a Contributor License
+Agreement. You (or your employer) retain the copyright to your contribution;
+this simply gives us permission to use and redistribute your contributions as
+part of the project. Head over to
IMPORTANT: You must add `http://localhost/oauth2callback` to the "Authorize redirect
+ * URIs" list in your Google Cloud Console project before running this example.
+ */
+class AuthenticateInWebApplication
+{
+
+ /**
+ * @var string the OAuth2 scope for the AdWords API
+ * @see https://developers.google.com/google-ads/api/docs/oauth/internals#scope
+ */
+ const SCOPE = 'https://www.googleapis.com/auth/adwords';
+
+ /**
+ * @var string the Google OAuth2 authorization URI for OAuth2 requests
+ * @see https://developers.google.com/identity/protocols/OAuth2InstalledApp#step-2-send-a-request-to-googles-oauth-20-server
+ */
+ const AUTHORIZATION_URI = 'https://accounts.google.com/o/oauth2/v2/auth';
+
+ /**
+ * @var string the OAuth2 call back URL path.
+ */
+ const OAUTH2_CALLBACK_PATH = '/oauth2callback';
+
+ public static function main()
+ {
+ $loop = Factory::create();
+ // Creates a socket for localhost with random port.
+ $socket = new \React\Socket\Server(0, $loop);
+
+ print 'Enter your OAuth2 client ID here: ';
+ $clientId = trim(fgets(STDIN));
+
+ print 'Enter your OAuth2 client secret here: ';
+ $clientSecret = trim(fgets(STDIN));
+
+ $redirectUrl = str_replace('tcp:', 'http:', $socket->getAddress());
+ $oauth2 = new OAuth2(
+ [
+ 'clientId' => $clientId,
+ 'clientSecret' => $clientSecret,
+ 'authorizationUri' => self::AUTHORIZATION_URI,
+ 'redirectUri' => $redirectUrl . self::OAUTH2_CALLBACK_PATH,
+ 'tokenCredentialUri' => CredentialsLoader::TOKEN_CREDENTIAL_URI,
+ 'scope' => self::SCOPE,
+ // Create a 'state' token to prevent request forgery. See
+ // https://developers.google.com/identity/protocols/OpenIDConnect#createxsrftoken
+ // for details.
+ 'state' => sha1(openssl_random_pseudo_bytes(1024))
+ ]
+ );
+
+ $authToken = null;
+
+ $server = new Server(
+ function (ServerRequestInterface $request) use ($oauth2, $loop, &$authToken) {
+ // Stops the server after tokens are retrieved.
+ if (!is_null($authToken)) {
+ $loop->stop();
+ }
+
+ // Check if the requested path is the one set as the redirect URI.
+ if ($request->getUri()->getPath()
+ !== parse_url($oauth2->getRedirectUri(), PHP_URL_PATH)) {
+ return new Response(
+ 404,
+ ['Content-Type' => 'text/plain'],
+ 'Page not found'
+ );
+ }
+
+ // Exit if the state is invalid to prevent request forgery.
+ $state = $request->getQueryParams()['state'];
+ if (empty($state) || ($state !== $oauth2->getState())) {
+ throw new UnexpectedValueException(
+ "The state is empty or doesn't match expected one." . PHP_EOL
+ );
+ };
+
+ // Set the authorization code and fetch refresh and access tokens.
+ $code = $request->getQueryParams()['code'];
+ $oauth2->setCode($code);
+ $authToken = $oauth2->fetchAuthToken();
+
+ $refreshToken = $authToken['refresh_token'];
+ print 'Your refresh token is: ' . $refreshToken . PHP_EOL;
+
+ $propertiesToCopy = '[GOOGLE_ADS]' . PHP_EOL;
+ $propertiesToCopy .= 'developerToken = "INSERT_DEVELOPER_TOKEN_HERE"' . PHP_EOL;
+ $propertiesToCopy .= '[OAUTH2]' . PHP_EOL;
+ $propertiesToCopy .= "clientId = \"{$oauth2->getClientId()}\"" . PHP_EOL;
+ $propertiesToCopy .= "clientSecret = \"{$oauth2->getClientSecret()}\"" . PHP_EOL;
+ $propertiesToCopy .= "refreshToken = \"$refreshToken\"" . PHP_EOL;
+
+ print 'Copy the text below into a file named "google_ads_php.ini" in your home '
+ . 'directory, and replace "INSERT_DEVELOPER_TOKEN_HERE" with your developer '
+ . 'token:' . PHP_EOL;
+ print PHP_EOL . $propertiesToCopy;
+
+ return new Response(
+ 200,
+ ['Content-Type' => 'text/plain'],
+ 'Your refresh token has been fetched. Check the console output for '
+ . 'further instructions.'
+ );
+ }
+ );
+
+ $server->listen($socket);
+ printf(
+ 'Log into the Google account you use for AdWords and visit the following URL '
+ . 'in your web browser: %1$s%2$s%1$s%1$s',
+ PHP_EOL,
+ $oauth2->buildFullAuthorizationUri(['access_type' => 'offline'])
+ );
+
+ $loop->run();
+ }
+}
+
+AuthenticateInWebApplication::main();
diff --git a/examples/Authentication/google_ads_php.ini b/examples/Authentication/google_ads_php.ini
new file mode 100644
index 000000000..75d480a74
--- /dev/null
+++ b/examples/Authentication/google_ads_php.ini
@@ -0,0 +1,16 @@
+[GOOGLE_ADS]
+; Required some config parameters, which can be found at:
+; https://developers.google.com/google-ads/api/docs/first-call/overview#config
+developerToken = "INSERT_DEVELOPER_TOKEN_HERE"
+
+; Optional additional settings.
+; endpoint = "https://adwords.google.com/"
+
+[OAUTH2]
+; Required OAuth2 credentials. Uncomment and fill in the values for the
+; appropriate flow based on your use case.
+
+; For installed application flow.
+clientId = "INSERT_OAUTH2_CLIENT_ID_HERE"
+clientSecret = "INSERT_OAUTH2_CLIENT_SECRET_HERE"
+refreshToken = "INSERT_OAUTH2_REFRESH_TOKEN_HERE"
\ No newline at end of file
diff --git a/examples/BasicOperations/AddAdGroups.php b/examples/BasicOperations/AddAdGroups.php
new file mode 100644
index 000000000..cde1681fe
--- /dev/null
+++ b/examples/BasicOperations/AddAdGroups.php
@@ -0,0 +1,161 @@
+ GetOpt::REQUIRED_ARGUMENT,
+ ArgumentNames::CAMPAIGN_ID => GetOpt::REQUIRED_ARGUMENT
+ ]);
+
+ // Generate a refreshable OAuth2 credential for authentication.
+ $oAuth2Credential = (new OAuth2TokenBuilder())->fromFile()->build();
+
+ // Construct a Google Ads client configured from a properties file and the
+ // OAuth2 credentials above.
+ $googleAdsClient = (new GoogleAdsClientBuilder())->fromFile()
+ ->withOAuth2Credential($oAuth2Credential)
+ ->build();
+
+ try {
+ self::runExample(
+ $googleAdsClient,
+ $options[ArgumentNames::CUSTOMER_ID] ?: self::CUSTOMER_ID,
+ $options[ArgumentNames::CAMPAIGN_ID] ?: self::CAMPAIGN_ID
+ );
+ } catch (GoogleAdsException $googleAdsException) {
+ printf(
+ "Request with ID '%s' has failed.%sGoogle Ads failure details:%s",
+ $googleAdsException->getRequestId(),
+ PHP_EOL,
+ PHP_EOL
+ );
+ foreach ($googleAdsException->getGoogleAdsFailure()->getErrors() as $error) {
+ /** @var GoogleAdsError $error */
+ printf(
+ "\t%s: %s%s",
+ $error->getErrorCode()->getErrorCode(),
+ $error->getMessage(),
+ PHP_EOL
+ );
+ }
+ } catch (ApiException $apiException) {
+ printf(
+ "ApiException was thrown with message '%s'.%s",
+ $apiException->getMessage(),
+ PHP_EOL
+ );
+ }
+ }
+
+ /**
+ * Runs the example.
+ *
+ * @param GoogleAdsClient $googleAdsClient the Google Ads API client
+ * @param int $customerId the client customer ID without hyphens
+ * @param int $campaignId the campaign ID to add ad groups to
+ */
+ public static function runExample(
+ GoogleAdsClient $googleAdsClient,
+ $customerId,
+ $campaignId
+ ) {
+ $wrappedCampaignResourceName = new StringValue();
+ $wrappedCampaignResourceName->setValue(
+ ResourceNames::forCampaign($customerId, $campaignId)
+ );
+
+ $operations = [];
+
+ // Constructs an ad group and sets an optional CPC value.
+ $adGroup1 = new AdGroup();
+ $wrappedName1 = new StringValue();
+ $wrappedName1->setValue('Earth to Mars Cruises #' . uniqid());
+ $adGroup1->setName($wrappedName1);
+ $adGroup1->setCampaign($wrappedCampaignResourceName);
+ $adGroup1->setStatus(AdGroupStatusEnum_AdGroupStatus::ENABLED);
+ $adGroup1->setType(AdGroupTypeEnum_AdGroupType::SEARCH_STANDARD);
+ $wrappedCpcBidMicros1 = new Int64Value();
+ $wrappedCpcBidMicros1->setValue(10000000);
+ $adGroup1->setCpcBidMicros($wrappedCpcBidMicros1);
+
+ $adGroupOperation1 = new AdGroupOperation();
+ $adGroupOperation1->setCreate($adGroup1);
+ $operations[] = $adGroupOperation1;
+
+ // Constructs another ad group.
+ $adGroup2 = new AdGroup();
+ $wrappedName2 = new StringValue();
+ $wrappedName2->setValue('Earth to Venus Cruises #' . uniqid());
+ $adGroup2->setName($wrappedName2);
+ $adGroup2->setCampaign($wrappedCampaignResourceName);
+ $adGroup2->setStatus(AdGroupStatusEnum_AdGroupStatus::ENABLED);
+ $adGroup2->setType(AdGroupTypeEnum_AdGroupType::SEARCH_STANDARD);
+ $wrappedCpcBidMicros2 = new Int64Value();
+ $wrappedCpcBidMicros2->setValue(20000000);
+ $adGroup2->setCpcBidMicros($wrappedCpcBidMicros2);
+
+ $adGroupOperation2 = new AdGroupOperation();
+ $adGroupOperation2->setCreate($adGroup2);
+ $operations[] = $adGroupOperation2;
+
+ // Issues a mutate request to add the ad groups.
+ $adGroupServiceClient = $googleAdsClient->getAdGroupServiceClient();
+ $response = $adGroupServiceClient->mutateAdGroups(
+ $customerId,
+ $operations
+ );
+
+ printf("Added %d ad groups:%s", $response->getResults()->count(), PHP_EOL);
+
+ foreach ($response->getResults() as $addedAdGroup) {
+ /** @var AdGroup $addedAdGroup */
+ print $addedAdGroup->getResourceName() . PHP_EOL;
+ }
+ }
+}
+
+AddAdGroups::main();
diff --git a/examples/BasicOperations/AddCampaigns.php b/examples/BasicOperations/AddCampaigns.php
new file mode 100644
index 000000000..935a7c831
--- /dev/null
+++ b/examples/BasicOperations/AddCampaigns.php
@@ -0,0 +1,213 @@
+ GetOpt::REQUIRED_ARGUMENT
+ ]);
+
+ // Generate a refreshable OAuth2 credential for authentication.
+ $oAuth2Credential = (new OAuth2TokenBuilder())->fromFile()->build();
+
+ // Construct a Google Ads client configured from a properties file and the
+ // OAuth2 credentials above.
+ $googleAdsClient = (new GoogleAdsClientBuilder())
+ ->fromFile()
+ ->withOAuth2Credential($oAuth2Credential)
+ ->build();
+
+ try {
+ self::runExample(
+ $googleAdsClient,
+ $options[ArgumentNames::CUSTOMER_ID] ?: self::CUSTOMER_ID
+ );
+ } catch (GoogleAdsException $googleAdsException) {
+ printf(
+ "Request with ID '%s' has failed.%sGoogle Ads failure details:%s",
+ $googleAdsException->getRequestId(),
+ PHP_EOL,
+ PHP_EOL
+ );
+ foreach ($googleAdsException->getGoogleAdsFailure()->getErrors() as $error) {
+ /** @var GoogleAdsError $error */
+ printf(
+ "\t%s: %s%s",
+ $error->getErrorCode()->getErrorCode(),
+ $error->getMessage(),
+ PHP_EOL
+ );
+ }
+ } catch (ApiException $apiException) {
+ printf(
+ "ApiException was thrown with message '%s'.%s",
+ $apiException->getMessage(),
+ PHP_EOL
+ );
+ }
+ }
+
+ /**
+ * Runs the example.
+ *
+ * @param GoogleAdsClient $googleAdsClient the Google Ads API client
+ * @param int $customerId the client customer ID without hyphens
+ */
+ public static function runExample(GoogleAdsClient $googleAdsClient, $customerId)
+ {
+ // Creates a single shared budget to be used by the campaigns added below.
+ $budgetResourceName = self::addCampaignBudget($googleAdsClient, $customerId);
+ $wrappedBudgetResourceName = new StringValue();
+ $wrappedBudgetResourceName->setValue($budgetResourceName);
+
+ $wrappedTrueValue = new BoolValue();
+ $wrappedTrueValue->setValue(true);
+ $wrappedFalseValue = new BoolValue();
+ $wrappedFalseValue->setValue(false);
+
+ $wrappedStartDate = new StringValue();
+ $wrappedStartDate->setValue(date('Ymd', strtotime('+1 day')));
+ $wrappedEndDate = new StringValue();
+ $wrappedEndDate->setValue(date('Ymd', strtotime('+1 month')));
+
+ $campaignOperations = [];
+ for ($i = 0; $i < self::NUMBER_OF_CAMPAIGNS_TO_ADD; $i++) {
+ // Configures the campaign network options.
+ $networkSettings = new Campaign_NetworkSettings();
+ $networkSettings->setTargetGoogleSearch($wrappedTrueValue);
+ $networkSettings->setTargetSearchNetwork($wrappedTrueValue);
+ $networkSettings->setTargetContentNetwork($wrappedFalseValue);
+ $networkSettings->setTargetPartnerSearchNetwork($wrappedFalseValue);
+
+ // Creates a campaign.
+ $campaign = new Campaign();
+
+ $wrappedName = new StringValue();
+ $wrappedName->setValue('Interplanetary Cruise #' . uniqid());
+ $campaign->setName($wrappedName);
+
+ $campaign->setAdvertisingChannelType(
+ AdvertisingChannelTypeEnum_AdvertisingChannelType::SEARCH
+ );
+ // Recommendation: Set the campaign to PAUSED when creating it to prevent
+ // the ads from immediately serving. Set to ENABLED once you've added
+ // targeting and the ads are ready to serve.
+ $campaign->setStatus(CampaignStatusEnum_CampaignStatus::PAUSED);
+ // Sets the bidding strategy and budget.
+ $campaign->setManualCpc(new ManualCpc());
+ $campaign->setCampaignBudget($wrappedBudgetResourceName);
+ // Adds the network settings configured above.
+ $campaign->setNetworkSettings($networkSettings);
+
+ // Optional: Sets the start and end dates.
+ $campaign->setStartDate($wrappedStartDate);
+ $campaign->setEndDate($wrappedEndDate);
+
+ // Creates a campaign operation.
+ $campaignOperation = new CampaignOperation();
+ $campaignOperation->setCreate($campaign);
+ $campaignOperations[] = $campaignOperation;
+ }
+
+ // Issues a mutate request to add campaigns.
+ $campaignServiceClient = $googleAdsClient->getCampaignServiceClient();
+ $response = $campaignServiceClient->mutateCampaigns($customerId, $campaignOperations);
+
+ printf("Added %d campaigns:%s", $response->getResults()->count(), PHP_EOL);
+
+ foreach ($response->getResults() as $addedCampaign) {
+ /** @var Campaign $addedCampaign */
+ print "{$addedCampaign->getResourceName()}" . PHP_EOL;
+ }
+ }
+
+ /**
+ * Creates a new campaign budget in the specified client account.
+ *
+ * @param GoogleAdsClient $googleAdsClient the Google Ads API client
+ * @param int $customerId the client customer ID
+ * @return string the resource name of the newly created budget
+ */
+ private static function addCampaignBudget(GoogleAdsClient $googleAdsClient, $customerId)
+ {
+ // Creates a campaign budget.
+ $budget = new CampaignBudget();
+
+ $wrappedName = new StringValue();
+ $wrappedName->setValue('Interplanetary Cruise Budget #' . uniqid());
+ $budget->setName($wrappedName);
+
+ $budget->setDeliveryMethod(BudgetDeliveryMethodEnum_BudgetDeliveryMethod::STANDARD);
+
+ $wrappedAmountMicros = new Int64Value();
+ $wrappedAmountMicros->setValue(500000);
+ $budget->setAmountMicros($wrappedAmountMicros);
+
+ // Creates a campaign budget operation.
+ $campaignBudgetOperation = new CampaignBudgetOperation();
+ $campaignBudgetOperation->setCreate($budget);
+
+ // Issues a mutate request.
+ $campaignBudgetServiceClient = $googleAdsClient->getCampaignBudgetServiceClient();
+ $response = $campaignBudgetServiceClient->mutateCampaignBudgets(
+ $customerId,
+ [$campaignBudgetOperation]
+ );
+
+ /** @var CampaignBudget $addedBudget */
+ $addedBudget = $response->getResults()[0];
+ printf("Added budget named '%s'%s", $addedBudget->getResourceName(), PHP_EOL);
+
+ return $addedBudget->getResourceName();
+ }
+}
+
+AddCampaigns::main();
diff --git a/examples/BasicOperations/AddExpandedTextAds.php b/examples/BasicOperations/AddExpandedTextAds.php
new file mode 100644
index 000000000..14478fae9
--- /dev/null
+++ b/examples/BasicOperations/AddExpandedTextAds.php
@@ -0,0 +1,162 @@
+ GetOpt::REQUIRED_ARGUMENT,
+ ArgumentNames::AD_GROUP_ID => GetOpt::REQUIRED_ARGUMENT
+ ]);
+
+ // Generate a refreshable OAuth2 credential for authentication.
+ $oAuth2Credential = (new OAuth2TokenBuilder())->fromFile()->build();
+
+ // Construct a Google Ads client configured from a properties file and the
+ // OAuth2 credentials above.
+ $googleAdsClient = (new GoogleAdsClientBuilder())->fromFile()
+ ->withOAuth2Credential($oAuth2Credential)
+ ->build();
+
+ try {
+ self::runExample(
+ $googleAdsClient,
+ $options[ArgumentNames::CUSTOMER_ID] ?: self::CUSTOMER_ID,
+ $options[ArgumentNames::AD_GROUP_ID] ?: self::AD_GROUP_ID
+ );
+ } catch (GoogleAdsException $googleAdsException) {
+ printf(
+ "Request with ID '%s' has failed.%sGoogle Ads failure details:%s",
+ $googleAdsException->getRequestId(),
+ PHP_EOL,
+ PHP_EOL
+ );
+ foreach ($googleAdsException->getGoogleAdsFailure()->getErrors() as $error) {
+ /** @var GoogleAdsError $error */
+ printf(
+ "\t%s: %s%s",
+ $error->getErrorCode()->getErrorCode(),
+ $error->getMessage(),
+ PHP_EOL
+ );
+ }
+ } catch (ApiException $apiException) {
+ printf(
+ "ApiException was thrown with message '%s'.%s",
+ $apiException->getMessage(),
+ PHP_EOL
+ );
+ }
+ }
+
+ /**
+ * Runs the example.
+ *
+ * @param GoogleAdsClient $googleAdsClient the Google Ads API client
+ * @param int $customerId the client customer ID without hyphens
+ * @param int $adGroupId the ad group ID to add a keyword to
+ */
+ public static function runExample(
+ GoogleAdsClient $googleAdsClient,
+ $customerId,
+ $adGroupId
+ ) {
+ $wrappedAdGroupResourceName = new StringValue();
+ $wrappedAdGroupResourceName->setValue(ResourceNames::forAdGroup($customerId, $adGroupId));
+
+ $operations = [];
+ for ($i = 0; $i < self::NUMBER_OF_ADS_TO_ADD; $i++) {
+ // Creates the expanded text ad info.
+ $expandedTextAdInfo = new ExpandedTextAdInfo();
+
+ $wrappedHeadlinePart1 = new StringValue();
+ $wrappedHeadlinePart1->setValue('Cruise to Mars #' . uniqid());
+ $expandedTextAdInfo->setHeadlinePart1($wrappedHeadlinePart1);
+
+ $wrappedHeadlinePart2 = new StringValue();
+ $wrappedHeadlinePart2->setValue('Best Space Cruise Line');
+ $expandedTextAdInfo->setHeadlinePart2($wrappedHeadlinePart2);
+
+ $wrappedDescription = new StringValue();
+ $wrappedDescription->setValue('Buy your tickets now!');
+ $expandedTextAdInfo->setDescription($wrappedDescription);
+
+ // Sets the expanded text ad info on an Ad.
+ $ad = new Ad();
+ $ad->setExpandedTextAd($expandedTextAdInfo);
+ $wrappedFinalUrl = new StringValue();
+ $wrappedFinalUrl->setValue('http://www.example.com');
+ $ad->setFinalUrls([$wrappedFinalUrl]);
+
+ // Creates an ad group ad to hold the above ad.
+ $adGroupAd = new AdGroupAd();
+ $adGroupAd->setAdGroup($wrappedAdGroupResourceName);
+ $adGroupAd->setStatus(AdGroupAdStatusEnum_AdGroupAdStatus::PAUSED);
+ $adGroupAd->setAd($ad);
+
+ // Creates an ad group ad operation and add it to the operations array.
+ $adGroupAdOperation = new AdGroupAdOperation();
+ $adGroupAdOperation->setCreate($adGroupAd);
+ $operations[] = $adGroupAdOperation;
+ }
+
+ // Issues a mutate request to add the ad group ads.
+ $adGroupAdServiceClient = $googleAdsClient->getAdGroupAdServiceClient();
+ $response = $adGroupAdServiceClient->mutateAdGroupAds($customerId, $operations);
+
+ foreach ($response->getResults() as $addedAdGroupAd) {
+ /** @var AdGroupAd $addedAdGroupAd */
+ printf(
+ "Expanded text ad was created with resource name: '%s'%s",
+ $addedAdGroupAd->getResourceName(),
+ PHP_EOL
+ );
+ }
+ }
+}
+
+AddExpandedTextAds::main();
diff --git a/examples/BasicOperations/AddKeywords.php b/examples/BasicOperations/AddKeywords.php
new file mode 100644
index 000000000..e7ea7b60a
--- /dev/null
+++ b/examples/BasicOperations/AddKeywords.php
@@ -0,0 +1,148 @@
+ GetOpt::REQUIRED_ARGUMENT,
+ ArgumentNames::AD_GROUP_ID => GetOpt::REQUIRED_ARGUMENT,
+ ArgumentNames::KEYWORD_TEXT => GetOpt::OPTIONAL_ARGUMENT
+ ]);
+
+ // Generate a refreshable OAuth2 credential for authentication.
+ $oAuth2Credential = (new OAuth2TokenBuilder())->fromFile()->build();
+
+ // Construct a Google Ads client configured from a properties file and the
+ // OAuth2 credentials above.
+ $googleAdsClient = (new GoogleAdsClientBuilder())->fromFile()
+ ->withOAuth2Credential($oAuth2Credential)
+ ->build();
+
+ try {
+ self::runExample(
+ $googleAdsClient,
+ $options[ArgumentNames::CUSTOMER_ID] ?: self::CUSTOMER_ID,
+ $options[ArgumentNames::AD_GROUP_ID] ?: self::AD_GROUP_ID,
+ $options[ArgumentNames::KEYWORD_TEXT] ?: self::KEYWORD_TEXT
+ );
+ } catch (GoogleAdsException $googleAdsException) {
+ printf(
+ "Request with ID '%s' has failed.%sGoogle Ads failure details:%s",
+ $googleAdsException->getRequestId(),
+ PHP_EOL,
+ PHP_EOL
+ );
+ foreach ($googleAdsException->getGoogleAdsFailure()->getErrors() as $error) {
+ /** @var GoogleAdsError $error */
+ printf(
+ "\t%s: %s%s",
+ $error->getErrorCode()->getErrorCode(),
+ $error->getMessage(),
+ PHP_EOL
+ );
+ }
+ } catch (ApiException $apiException) {
+ printf(
+ "ApiException was thrown with message '%s'.%s",
+ $apiException->getMessage(),
+ PHP_EOL
+ );
+ }
+ }
+
+ /**
+ * Runs the example.
+ *
+ * @param GoogleAdsClient $googleAdsClient the Google Ads API client
+ * @param int $customerId the client customer ID without hyphens
+ * @param int $adGroupId the ad group ID to add a keyword to
+ * @param string $keywordText the keyword text to add
+ */
+ public static function runExample(
+ GoogleAdsClient $googleAdsClient,
+ $customerId,
+ $adGroupId,
+ $keywordText
+ ) {
+ $wrappedKeywordText = new StringValue();
+ $wrappedKeywordText->setValue($keywordText);
+
+ // Configures the keyword text and match type settings.
+ $keywordInfo = new KeywordInfo();
+ $keywordInfo->setText($wrappedKeywordText);
+ $keywordInfo->setMatchType(KeywordMatchTypeEnum_KeywordMatchType::EXACT);
+
+ $wrappedAdGroupResourceName = new StringValue();
+ $wrappedAdGroupResourceName->setValue(ResourceNames::forAdGroup($customerId, $adGroupId));
+
+ // Constructs an ad group criterion using the keyword text info above.
+ $adGroupCriterion = new AdGroupCriterion();
+ $adGroupCriterion->setAdGroup($wrappedAdGroupResourceName);
+ $adGroupCriterion->setStatus(AdGroupCriterionStatusEnum_AdGroupCriterionStatus::ENABLED);
+ $adGroupCriterion->setKeyword($keywordInfo);
+
+ $adGroupCriterionOperation = new AdGroupCriterionOperation();
+ $adGroupCriterionOperation->setCreate($adGroupCriterion);
+
+ // Issues a mutate request to add the ad group criterion.
+ $adGroupCriterionServiceClient = $googleAdsClient->getAdGroupCriterionServiceClient();
+ $response = $adGroupCriterionServiceClient->mutateAdGroupCriteria(
+ $customerId,
+ [$adGroupCriterionOperation]
+ );
+
+ printf("Added %d ad group criteria:%s", $response->getResults()->count(), PHP_EOL);
+
+ foreach ($response->getResults() as $addedAdGroupCriterion) {
+ /** @var AdGroupCriterion $addedAdGroupCriterion */
+ print $addedAdGroupCriterion->getResourceName() . PHP_EOL;
+ }
+ }
+}
+
+AddKeywords::main();
diff --git a/examples/BasicOperations/GetAdGroups.php b/examples/BasicOperations/GetAdGroups.php
new file mode 100644
index 000000000..bcc377b82
--- /dev/null
+++ b/examples/BasicOperations/GetAdGroups.php
@@ -0,0 +1,127 @@
+ GetOpt::REQUIRED_ARGUMENT,
+ ArgumentNames::CAMPAIGN_ID => GetOpt::OPTIONAL_ARGUMENT
+ ]);
+
+ // Generate a refreshable OAuth2 credential for authentication.
+ $oAuth2Credential = (new OAuth2TokenBuilder())->fromFile()->build();
+
+ // Construct a Google Ads client configured from a properties file and the
+ // OAuth2 credentials above.
+ $googleAdsClient = (new GoogleAdsClientBuilder())->fromFile()
+ ->withOAuth2Credential($oAuth2Credential)
+ ->build();
+
+ try {
+ self::runExample(
+ $googleAdsClient,
+ $options[ArgumentNames::CUSTOMER_ID] ?: self::CUSTOMER_ID,
+ $options[ArgumentNames::CAMPAIGN_ID] ?: self::CAMPAIGN_ID
+ );
+ } catch (GoogleAdsException $googleAdsException) {
+ printf(
+ "Request with ID '%s' has failed.%sGoogle Ads failure details:%s",
+ $googleAdsException->getRequestId(),
+ PHP_EOL,
+ PHP_EOL
+ );
+ foreach ($googleAdsException->getGoogleAdsFailure()->getErrors() as $error) {
+ /** @var GoogleAdsError $error */
+ printf(
+ "\t%s: %s%s",
+ $error->getErrorCode()->getErrorCode(),
+ $error->getMessage(),
+ PHP_EOL
+ );
+ }
+ } catch (ApiException $apiException) {
+ printf(
+ "ApiException was thrown with message '%s'.%s",
+ $apiException->getMessage(),
+ PHP_EOL
+ );
+ }
+ }
+
+ /**
+ * Runs the example.
+ *
+ * @param GoogleAdsClient $googleAdsClient the Google Ads API client
+ * @param int $customerId the client customer ID without hyphens
+ * @param int $campaignId the campaign ID for which ad groups will be retrieved. If `null`,
+ * returns from all campaigns
+ */
+ public static function runExample(GoogleAdsClient $googleAdsClient, $customerId, $campaignId)
+ {
+ $googleAdsServiceClient = $googleAdsClient->getGoogleAdsServiceClient();
+ // Creates a query that retrieves all ad groups.
+ $query = 'SELECT campaign.id, ad_group.id, ad_group.name FROM ad_group';
+ if ($campaignId !== null) {
+ $query .= " WHERE campaign.id = $campaignId";
+ }
+
+ // Issues a search request by specifying page size.
+ $response =
+ $googleAdsServiceClient->search($customerId, $query, ['pageSize' => self::PAGE_SIZE]);
+
+ // Iterates over all rows in all pages and prints the requested field values for
+ // the ad group in each row.
+ foreach ($response->iterateAllElements() as $googleAdsRow) {
+ /** @var GoogleAdsRow $googleAdsRow */
+ printf(
+ "Ad group with ID %d and name '%s' was found in campaign with ID %d.%s",
+ $googleAdsRow->getAdGroup()->getId()->getValue(),
+ $googleAdsRow->getAdGroup()->getName()->getValue(),
+ $googleAdsRow->getCampaign()->getId()->getValue(),
+ PHP_EOL
+ );
+ }
+ }
+}
+
+GetAdGroups::main();
diff --git a/examples/BasicOperations/GetArtifactMetadata.php b/examples/BasicOperations/GetArtifactMetadata.php
new file mode 100644
index 000000000..af7d900fa
--- /dev/null
+++ b/examples/BasicOperations/GetArtifactMetadata.php
@@ -0,0 +1,151 @@
+ GetOpt::REQUIRED_ARGUMENT
+ ]);
+
+ // Generate a refreshable OAuth2 credential for authentication.
+ $oAuth2Credential = (new OAuth2TokenBuilder())->fromFile()->build();
+
+ // Construct a Google Ads client configured from a properties file and the
+ // OAuth2 credentials above.
+ $googleAdsClient = (new GoogleAdsClientBuilder())->fromFile()
+ ->withOAuth2Credential($oAuth2Credential)
+ ->build();
+
+ try {
+ self::runExample(
+ $googleAdsClient,
+ $options[ArgumentNames::ARTIFACT_NAME] ?: self::ARTIFACT_NAME
+ );
+ } catch (GoogleAdsException $googleAdsException) {
+ printf(
+ "Request with ID '%s' has failed.%sGoogle Ads failure details:%s",
+ $googleAdsException->getRequestId(),
+ PHP_EOL,
+ PHP_EOL
+ );
+ foreach ($googleAdsException->getGoogleAdsFailure()->getErrors() as $error) {
+ /** @var GoogleAdsError $error */
+ printf(
+ "\t%s: %s%s",
+ $error->getErrorCode()->getErrorCode(),
+ $error->getMessage(),
+ PHP_EOL
+ );
+ }
+ } catch (ApiException $apiException) {
+ printf(
+ "ApiException was thrown with message '%s'.%s",
+ $apiException->getMessage(),
+ PHP_EOL
+ );
+ }
+ }
+
+ /**
+ * Runs the example.
+ *
+ * @param GoogleAdsClient $googleAdsClient the Google Ads API client
+ * @param int $artifactName the name of artifact to get its metadata
+ */
+ public static function runExample(GoogleAdsClient $googleAdsClient, $artifactName)
+ {
+ $googleAdsFieldServiceClient = $googleAdsClient->getGoogleAdsFieldServiceClient();
+ // Searches for an artifact whose name is the same as the specified artifactName.
+ $query = 'SELECT name, category, selectable, filterable, sortable, selectable_with, '
+ . 'data_type, is_repeated WHERE name = ' . $artifactName;
+ $response = $googleAdsFieldServiceClient->searchGoogleAdsFields($query);
+
+ // Iterates over all rows and prints our the metadata of the returned artifacts
+ foreach ($response->iterateAllElements() as $googleAdsField) {
+ /** @var GoogleAdsField $googleAdsField */
+ // Note that the category and data type printed below are enum values.
+ // For example, a value of 2 will be returned when the category is 'RESOURCE'.
+ // A mapping of enum names to values can be found at
+ // GoogleAdsFieldCategoryEnum_GoogleAdsFieldCategory.php for the category and
+ // GoogleAdsFieldDataTypeEnum_GoogleAdsFieldDataType.php for the data type.
+ printf(
+ "An artifact named '%s' with category %d and data type %d %s selectable, %s "
+ . "filterable, %s sortable and %s repeated.%s",
+ $googleAdsField->getName()->getValue(),
+ $googleAdsField->getCategory(),
+ $googleAdsField->getDataType(),
+ self::getIsOrIsNot($googleAdsField->getSelectable()),
+ self::getIsOrIsNot($googleAdsField->getFilterable()),
+ self::getIsOrIsNot($googleAdsField->getSortable()),
+ self::getIsOrIsNot($googleAdsField->getIsRepeated()),
+ PHP_EOL
+ );
+ if ($googleAdsField->getSelectableWith()->count() > 0) {
+ $selectableArtifacts = [];
+ foreach ($googleAdsField->getSelectableWith() as $wrappedSelectableArtifact) {
+ /** @var StringValue $wrappedSelectableArtifact */
+ $selectableArtifacts[] = $wrappedSelectableArtifact->getValue();
+ }
+ printf(
+ '%1$sThe artifact can be selected with the following artifacts:%1$s',
+ PHP_EOL
+ );
+ foreach ($selectableArtifacts as $selectableArtifact) {
+ print $selectableArtifact . PHP_EOL;
+ }
+ }
+ }
+ }
+
+ /** Returns 'is' when the provided boolean value is true or 'is not' when it's false. */
+ private static function getIsOrIsNot(BoolValue $boolValue)
+ {
+ return $boolValue->getValue() ? 'is' : 'is not';
+ }
+}
+
+GetArtifactMetadata::main();
diff --git a/examples/BasicOperations/GetCampaigns.php b/examples/BasicOperations/GetCampaigns.php
new file mode 100644
index 000000000..940a10ded
--- /dev/null
+++ b/examples/BasicOperations/GetCampaigns.php
@@ -0,0 +1,116 @@
+ GetOpt::REQUIRED_ARGUMENT
+ ]);
+
+ // Generate a refreshable OAuth2 credential for authentication.
+ $oAuth2Credential = (new OAuth2TokenBuilder())->fromFile()->build();
+
+ // Construct a Google Ads client configured from a properties file and the
+ // OAuth2 credentials above.
+ $googleAdsClient = (new GoogleAdsClientBuilder())
+ ->fromFile()
+ ->withOAuth2Credential($oAuth2Credential)
+ ->build();
+
+ try {
+ self::runExample(
+ $googleAdsClient,
+ $options[ArgumentNames::CUSTOMER_ID] ?: self::CUSTOMER_ID
+ );
+ } catch (GoogleAdsException $googleAdsException) {
+ printf(
+ "Request with ID '%s' has failed.%sGoogle Ads failure details:%s",
+ $googleAdsException->getRequestId(),
+ PHP_EOL,
+ PHP_EOL
+ );
+ foreach ($googleAdsException->getGoogleAdsFailure()->getErrors() as $error) {
+ /** @var GoogleAdsError $error */
+ printf(
+ "\t%s: %s%s",
+ $error->getErrorCode()->getErrorCode(),
+ $error->getMessage(),
+ PHP_EOL
+ );
+ }
+ } catch (ApiException $apiException) {
+ printf(
+ "ApiException was thrown with message '%s'.%s",
+ $apiException->getMessage(),
+ PHP_EOL
+ );
+ }
+ }
+
+ /**
+ * Runs the example.
+ *
+ * @param GoogleAdsClient $googleAdsClient the Google Ads API client
+ * @param int $customerId the client customer ID without hyphens
+ */
+ public static function runExample(GoogleAdsClient $googleAdsClient, $customerId)
+ {
+ $googleAdsServiceClient = $googleAdsClient->getGoogleAdsServiceClient();
+ // Creates a query that retrieves all campaigns.
+ $query = 'SELECT campaign.id, campaign.name FROM campaign ORDER BY campaign.id';
+ // Issues a search request by specifying page size.
+ $response =
+ $googleAdsServiceClient->search($customerId, $query, ['pageSize' => self::PAGE_SIZE]);
+
+ // Iterates over all rows in all pages and prints the requested field values for
+ // the campaign in each row.
+ foreach ($response->iterateAllElements() as $googleAdsRow) {
+ /** @var GoogleAdsRow $googleAdsRow */
+ printf(
+ "Campaign with ID %d and name '%s' was found.%s",
+ $googleAdsRow->getCampaign()->getId()->getValue(),
+ $googleAdsRow->getCampaign()->getName()->getValue(),
+ PHP_EOL
+ );
+ }
+ }
+}
+
+GetCampaigns::main();
diff --git a/examples/BasicOperations/GetExpandedTextAds.php b/examples/BasicOperations/GetExpandedTextAds.php
new file mode 100644
index 000000000..41a8b21fc
--- /dev/null
+++ b/examples/BasicOperations/GetExpandedTextAds.php
@@ -0,0 +1,142 @@
+ GetOpt::REQUIRED_ARGUMENT,
+ ArgumentNames::AD_GROUP_ID => GetOpt::OPTIONAL_ARGUMENT
+ ]);
+
+ // Generate a refreshable OAuth2 credential for authentication.
+ $oAuth2Credential = (new OAuth2TokenBuilder())->fromFile()->build();
+
+ // Construct a Google Ads client configured from a properties file and the
+ // OAuth2 credentials above.
+ $googleAdsClient = (new GoogleAdsClientBuilder())->fromFile()
+ ->withOAuth2Credential($oAuth2Credential)
+ ->build();
+
+ try {
+ self::runExample(
+ $googleAdsClient,
+ $options[ArgumentNames::CUSTOMER_ID] ?: self::CUSTOMER_ID,
+ $options[ArgumentNames::AD_GROUP_ID] ?: self::AD_GROUP_ID
+ );
+ } catch (GoogleAdsException $googleAdsException) {
+ printf(
+ "Request with ID '%s' has failed.%sGoogle Ads failure details:%s",
+ $googleAdsException->getRequestId(),
+ PHP_EOL,
+ PHP_EOL
+ );
+ foreach ($googleAdsException->getGoogleAdsFailure()->getErrors() as $error) {
+ /** @var GoogleAdsError $error */
+ printf(
+ "\t%s: %s%s",
+ $error->getErrorCode()->getErrorCode(),
+ $error->getMessage(),
+ PHP_EOL
+ );
+ }
+ } catch (ApiException $apiException) {
+ printf(
+ "ApiException was thrown with message '%s'.%s",
+ $apiException->getMessage(),
+ PHP_EOL
+ );
+ }
+ }
+
+ /**
+ * Runs the example.
+ *
+ * @param GoogleAdsClient $googleAdsClient the Google Ads API client
+ * @param int $customerId the client customer ID without hyphens
+ * @param int $adGroupId the ad group ID for which expanded text ads will be retrieved. If
+ * `null`, returns from all ad groups
+ */
+ public static function runExample(GoogleAdsClient $googleAdsClient, $customerId, $adGroupId)
+ {
+ $googleAdsServiceClient = $googleAdsClient->getGoogleAdsServiceClient();
+ // Creates a query that retrieves expanded text ads.
+ $query =
+ 'SELECT ad_group.id, '
+ . 'ad_group_ad.ad.id, '
+ . 'ad_group_ad.ad.expanded_text_ad.headline_part1, '
+ . 'ad_group_ad.ad.expanded_text_ad.headline_part2, '
+ . 'ad_group_ad.status '
+ . 'FROM ad_group_ad '
+ . 'WHERE ad_group_ad.ad.type = EXPANDED_TEXT_AD';
+ if ($adGroupId !== null) {
+ $query .= " AND ad_group.id = $adGroupId";
+ }
+
+ // Issues a search request by specifying page size.
+ $response =
+ $googleAdsServiceClient->search($customerId, $query, ['pageSize' => self::PAGE_SIZE]);
+
+ // Iterates over all rows in all pages and prints the requested field values for
+ // the expanded text ad in each row.
+ foreach ($response->iterateAllElements() as $googleAdsRow) {
+ /** @var GoogleAdsRow $googleAdsRow */
+ $ad = $googleAdsRow->getAdGroupAd()->getAd();
+ // Note that the status printed below are enum values.
+ // For example, a value of 2 will be returned when the status is 'ENABLED'.
+ // A mapping of enum names to values can be found in:
+ // AdGroupAdStatusEnum_AdGroupAdStatus.php
+ printf(
+ "Expanded text ad with ID %d, status %d, and headline '%s - %s' was found in ad "
+ . "group with ID %d.%s",
+ $ad->getId()->getValue(),
+ $googleAdsRow->getAdGroupAd()->getStatus(),
+ $ad->getExpandedTextAd()->getHeadlinePart1()->getValue(),
+ $ad->getExpandedTextAd()->getHeadlinePart2()->getValue(),
+ $googleAdsRow->getAdGroup()->getId()->getValue(),
+ PHP_EOL
+ );
+ }
+ }
+}
+
+GetExpandedTextAds::main();
diff --git a/examples/BasicOperations/GetKeywords.php b/examples/BasicOperations/GetKeywords.php
new file mode 100644
index 000000000..cc0c0eb3f
--- /dev/null
+++ b/examples/BasicOperations/GetKeywords.php
@@ -0,0 +1,142 @@
+ GetOpt::REQUIRED_ARGUMENT,
+ ArgumentNames::AD_GROUP_ID => GetOpt::OPTIONAL_ARGUMENT
+ ]);
+
+ // Generate a refreshable OAuth2 credential for authentication.
+ $oAuth2Credential = (new OAuth2TokenBuilder())->fromFile()->build();
+
+ // Construct a Google Ads client configured from a properties file and the
+ // OAuth2 credentials above.
+ $googleAdsClient = (new GoogleAdsClientBuilder())->fromFile()
+ ->withOAuth2Credential($oAuth2Credential)
+ ->build();
+
+ try {
+ self::runExample(
+ $googleAdsClient,
+ $options[ArgumentNames::CUSTOMER_ID] ?: self::CUSTOMER_ID,
+ $options[ArgumentNames::AD_GROUP_ID] ?: self::AD_GROUP_ID
+ );
+ } catch (GoogleAdsException $googleAdsException) {
+ printf(
+ "Request with ID '%s' has failed.%sGoogle Ads failure details:%s",
+ $googleAdsException->getRequestId(),
+ PHP_EOL,
+ PHP_EOL
+ );
+ foreach ($googleAdsException->getGoogleAdsFailure()->getErrors() as $error) {
+ /** @var GoogleAdsError $error */
+ printf(
+ "\t%s: %s%s",
+ $error->getErrorCode()->getErrorCode(),
+ $error->getMessage(),
+ PHP_EOL
+ );
+ }
+ } catch (ApiException $apiException) {
+ printf(
+ "ApiException was thrown with message '%s'.%s",
+ $apiException->getMessage(),
+ PHP_EOL
+ );
+ }
+ }
+
+ /**
+ * Runs the example.
+ *
+ * @param GoogleAdsClient $googleAdsClient the Google Ads API client
+ * @param int $customerId the client customer ID without hyphens
+ * @param int $adGroupId the ad group ID for which keywords will be retrieved. If `null`,
+ * returns from all ad groups
+ */
+ public static function runExample(GoogleAdsClient $googleAdsClient, $customerId, $adGroupId)
+ {
+ $googleAdsServiceClient = $googleAdsClient->getGoogleAdsServiceClient();
+ // Creates a query that retrieves keywords.
+ $query =
+ 'SELECT ad_group.id, '
+ . 'ad_group_criterion.type, '
+ . 'ad_group_criterion.criterion_id, '
+ . 'ad_group_criterion.keyword.text, '
+ . 'ad_group_criterion.keyword.match_type '
+ . 'FROM ad_group_criterion '
+ . 'WHERE ad_group_criterion.type = KEYWORD';
+ if ($adGroupId !== null) {
+ $query .= " AND ad_group.id = $adGroupId";
+ }
+
+ // Issues a search request by specifying page size.
+ $response =
+ $googleAdsServiceClient->search($customerId, $query, ['pageSize' => self::PAGE_SIZE]);
+
+ // Iterates over all rows in all pages and prints the requested field values for
+ // the keyword in each row.
+ foreach ($response->iterateAllElements() as $googleAdsRow) {
+ /** @var GoogleAdsRow $googleAdsRow */
+ // Note that the match type and criteria type printed below are enum values.
+ // For example, a value of 2 will be returned when the keyword match type is 'EXACT'.
+ // A mapping of enum names to values can be found in:
+ // Match type enum class: KeywordMatchTypeEnum_KeywordMatchType.php
+ // Criterion type enum class: CriterionTypeEnum_CriterionType.php
+ printf(
+ "Keyword with text '%s', match type %d, criterion type %d, and ID %d "
+ . "was found in ad group with ID %d.%s",
+ $googleAdsRow->getAdGroupCriterion()->getKeyword()->getText()->getValue(),
+ $googleAdsRow->getAdGroupCriterion()->getKeyword()->getMatchType(),
+ $googleAdsRow->getAdGroupCriterion()->getType(),
+ $googleAdsRow->getAdGroupCriterion()->getCriterionId()->getValue(),
+ $googleAdsRow->getAdGroup()->getId()->getValue(),
+ PHP_EOL
+ );
+ }
+ }
+}
+
+GetKeywords::main();
diff --git a/examples/BasicOperations/PauseAd.php b/examples/BasicOperations/PauseAd.php
new file mode 100644
index 000000000..fa4b34e39
--- /dev/null
+++ b/examples/BasicOperations/PauseAd.php
@@ -0,0 +1,144 @@
+ GetOpt::REQUIRED_ARGUMENT,
+ ArgumentNames::AD_GROUP_ID => GetOpt::REQUIRED_ARGUMENT,
+ ArgumentNames::AD_ID => GetOpt::REQUIRED_ARGUMENT
+ ]);
+
+ // Generate a refreshable OAuth2 credential for authentication.
+ $oAuth2Credential = (new OAuth2TokenBuilder())->fromFile()->build();
+
+ // Construct a Google Ads client configured from a properties file and the
+ // OAuth2 credentials above.
+ $googleAdsClient = (new GoogleAdsClientBuilder())->fromFile()
+ ->withOAuth2Credential($oAuth2Credential)
+ ->build();
+
+ try {
+ self::runExample(
+ $googleAdsClient,
+ $options[ArgumentNames::CUSTOMER_ID] ?: self::CUSTOMER_ID,
+ $options[ArgumentNames::AD_GROUP_ID] ?: self::AD_GROUP_ID,
+ $options[ArgumentNames::AD_ID] ?: self::AD_ID
+ );
+ } catch (GoogleAdsException $googleAdsException) {
+ printf(
+ "Request with ID '%s' has failed.%sGoogle Ads failure details:%s",
+ $googleAdsException->getRequestId(),
+ PHP_EOL,
+ PHP_EOL
+ );
+ foreach ($googleAdsException->getGoogleAdsFailure()->getErrors() as $error) {
+ /** @var GoogleAdsError $error */
+ printf(
+ "\t%s: %s%s",
+ $error->getErrorCode()->getErrorCode(),
+ $error->getMessage(),
+ PHP_EOL
+ );
+ }
+ } catch (ApiException $apiException) {
+ printf(
+ "ApiException was thrown with message '%s'.%s",
+ $apiException->getMessage(),
+ PHP_EOL
+ );
+ }
+ }
+
+ /**
+ * Runs the example.
+ *
+ * @param GoogleAdsClient $googleAdsClient the Google Ads API client
+ * @param int $customerId the client customer ID without hyphens
+ * @param int $adGroupId the ad group ID that the ad group ad belongs to
+ * @param int $adId the ID of the ad to pause
+ */
+ public static function runExample(
+ GoogleAdsClient $googleAdsClient,
+ $customerId,
+ $adGroupId,
+ $adId
+ ) {
+ // Creates ad group ad resource name.
+ $adGroupAdResourceName = ResourceNames::forAdGroupAd($customerId, $adGroupId, $adId);
+
+ // Creates an ad and sets its status to PAUSED.
+ $adGroupAd = new AdGroupAd();
+ $adGroupAd->setResourceName($adGroupAdResourceName);
+ $adGroupAd->setStatus(AdGroupAdStatusEnum_AdGroupAdStatus::PAUSED);
+
+ // Constructs an operation that will pause the ad with the specified resource name,
+ // using the FieldMasks utility to derive the update mask. This mask tells the Google Ads
+ // API which attributes of the ad group you want to change.
+ $adGroupAdOperation = new AdGroupAdOperation();
+ $adGroupAdOperation->setUpdate($adGroupAd);
+ $adGroupAdOperation->setUpdateMask(FieldMasks::allSetFieldsOf($adGroupAd));
+
+ // Issues a mutate request to pause the ad group ad.
+ $adGroupAdServiceClient = $googleAdsClient->getAdGroupAdServiceClient();
+ $response = $adGroupAdServiceClient->mutateAdGroupAds(
+ $customerId,
+ [$adGroupAdOperation]
+ );
+
+ // Prints the resource name of the paused ad group ad.
+ /** @var AdGroupAd $pausedAdgroupAd */
+ $pausedAdgroupAd = $response->getResults()[0];
+ printf(
+ "Ad group ad with resource name: '%s' is paused.%s",
+ $pausedAdgroupAd->getResourceName(),
+ PHP_EOL
+ );
+ }
+}
+
+PauseAd::main();
diff --git a/examples/BasicOperations/RemoveAd.php b/examples/BasicOperations/RemoveAd.php
new file mode 100644
index 000000000..a10af87e0
--- /dev/null
+++ b/examples/BasicOperations/RemoveAd.php
@@ -0,0 +1,134 @@
+ GetOpt::REQUIRED_ARGUMENT,
+ ArgumentNames::AD_GROUP_ID => GetOpt::REQUIRED_ARGUMENT,
+ ArgumentNames::AD_ID => GetOpt::REQUIRED_ARGUMENT
+ ]);
+
+ // Generate a refreshable OAuth2 credential for authentication.
+ $oAuth2Credential = (new OAuth2TokenBuilder())->fromFile()->build();
+
+ // Construct a Google Ads client configured from a properties file and the
+ // OAuth2 credentials above.
+ $googleAdsClient = (new GoogleAdsClientBuilder())->fromFile()
+ ->withOAuth2Credential($oAuth2Credential)
+ ->build();
+
+ try {
+ self::runExample(
+ $googleAdsClient,
+ $options[ArgumentNames::CUSTOMER_ID] ?: self::CUSTOMER_ID,
+ $options[ArgumentNames::AD_GROUP_ID] ?: self::AD_GROUP_ID,
+ $options[ArgumentNames::AD_ID] ?: self::AD_ID
+ );
+ } catch (GoogleAdsException $googleAdsException) {
+ printf(
+ "Request with ID '%s' has failed.%sGoogle Ads failure details:%s",
+ $googleAdsException->getRequestId(),
+ PHP_EOL,
+ PHP_EOL
+ );
+ foreach ($googleAdsException->getGoogleAdsFailure()->getErrors() as $error) {
+ /** @var GoogleAdsError $error */
+ printf(
+ "\t%s: %s%s",
+ $error->getErrorCode()->getErrorCode(),
+ $error->getMessage(),
+ PHP_EOL
+ );
+ }
+ } catch (ApiException $apiException) {
+ printf(
+ "ApiException was thrown with message '%s'.%s",
+ $apiException->getMessage(),
+ PHP_EOL
+ );
+ }
+ }
+
+ /**
+ * Runs the example.
+ *
+ * @param GoogleAdsClient $googleAdsClient the Google Ads API client
+ * @param int $customerId the client customer ID without hyphens
+ * @param int $adGroupId the ad group ID that the ad group ad belongs to
+ * @param int $adId the ID of the ad to remove
+ */
+ public static function runExample(
+ GoogleAdsClient $googleAdsClient,
+ $customerId,
+ $adGroupId,
+ $adId
+ ) {
+ // Creates ad group ad resource name.
+ $adGroupAdResourceName = ResourceNames::forAdGroupAd($customerId, $adGroupId, $adId);
+
+ // Constructs an operation that will remove the ad with the specified resource name.
+ $adGroupAdOperation = new AdGroupAdOperation();
+ $adGroupAdOperation->setRemove($adGroupAdResourceName);
+
+ // Issues a mutate request to remove the ad group ad.
+ $adGroupAdServiceClient = $googleAdsClient->getAdGroupAdServiceClient();
+ $response = $adGroupAdServiceClient->mutateAdGroupAds(
+ $customerId,
+ [$adGroupAdOperation]
+ );
+
+ // Prints the resource name of the removed ad group ad.
+ /** @var AdGroupAd $removedAdGroupAd */
+ $removedAdGroupAd = $response->getResults()[0];
+ printf(
+ "Removed ad group ad with resource name: '%s'%s",
+ $removedAdGroupAd->getResourceName(),
+ PHP_EOL
+ );
+ }
+}
+
+RemoveAd::main();
diff --git a/examples/BasicOperations/RemoveAdGroup.php b/examples/BasicOperations/RemoveAdGroup.php
new file mode 100644
index 000000000..9f72daa41
--- /dev/null
+++ b/examples/BasicOperations/RemoveAdGroup.php
@@ -0,0 +1,130 @@
+ GetOpt::REQUIRED_ARGUMENT,
+ ArgumentNames::AD_GROUP_ID => GetOpt::REQUIRED_ARGUMENT
+ ]);
+
+ // Generate a refreshable OAuth2 credential for authentication.
+ $oAuth2Credential = (new OAuth2TokenBuilder())->fromFile()->build();
+
+ // Construct a Google Ads client configured from a properties file and the
+ // OAuth2 credentials above.
+ $googleAdsClient = (new GoogleAdsClientBuilder())->fromFile()
+ ->withOAuth2Credential($oAuth2Credential)
+ ->build();
+
+ try {
+ self::runExample(
+ $googleAdsClient,
+ $options[ArgumentNames::CUSTOMER_ID] ?: self::CUSTOMER_ID,
+ $options[ArgumentNames::AD_GROUP_ID] ?: self::AD_GROUP_ID
+ );
+ } catch (GoogleAdsException $googleAdsException) {
+ printf(
+ "Request with ID '%s' has failed.%sGoogle Ads failure details:%s",
+ $googleAdsException->getRequestId(),
+ PHP_EOL,
+ PHP_EOL
+ );
+ foreach ($googleAdsException->getGoogleAdsFailure()->getErrors() as $error) {
+ /** @var GoogleAdsError $error */
+ printf(
+ "\t%s: %s%s",
+ $error->getErrorCode()->getErrorCode(),
+ $error->getMessage(),
+ PHP_EOL
+ );
+ }
+ } catch (ApiException $apiException) {
+ printf(
+ "ApiException was thrown with message '%s'.%s",
+ $apiException->getMessage(),
+ PHP_EOL
+ );
+ }
+ }
+
+ /**
+ * Runs the example.
+ *
+ * @param GoogleAdsClient $googleAdsClient the Google Ads API client
+ * @param int $customerId the client customer ID without hyphens
+ * @param int $adGroupId the ID of ad group to remove
+ */
+ public static function runExample(
+ GoogleAdsClient $googleAdsClient,
+ $customerId,
+ $adGroupId
+ ) {
+ // Creates ad group resource name.
+ $adGroupResourceName = ResourceNames::forAdGroup($customerId, $adGroupId);
+
+ // Constructs an operation that will remove the ad group with the specified resource name.
+ $adGroupOperation = new AdGroupOperation();
+ $adGroupOperation->setRemove($adGroupResourceName);
+
+ // Issues a mutate request to remove the ad group.
+ $adGroupServiceClient = $googleAdsClient->getAdGroupServiceClient();
+ $response = $adGroupServiceClient->mutateAdGroups(
+ $customerId,
+ [$adGroupOperation]
+ );
+
+ // Prints the resource name of the removed ad group.
+ /** @var AdGroup $removedAdGroup */
+ $removedAdGroup = $response->getResults()[0];
+ printf(
+ "Removed ad group with resource name: '%s'%s",
+ $removedAdGroup->getResourceName(),
+ PHP_EOL
+ );
+ }
+}
+
+RemoveAdGroup::main();
diff --git a/examples/BasicOperations/RemoveCampaign.php b/examples/BasicOperations/RemoveCampaign.php
new file mode 100644
index 000000000..7c9a888b5
--- /dev/null
+++ b/examples/BasicOperations/RemoveCampaign.php
@@ -0,0 +1,122 @@
+ GetOpt::REQUIRED_ARGUMENT,
+ ArgumentNames::CAMPAIGN_ID => GetOpt::REQUIRED_ARGUMENT
+ ]);
+
+ // Generate a refreshable OAuth2 credential for authentication.
+ $oAuth2Credential = (new OAuth2TokenBuilder())->fromFile()->build();
+
+ // Construct a Google Ads client configured from a properties file and the
+ // OAuth2 credentials above.
+ $googleAdsClient = (new GoogleAdsClientBuilder())->fromFile()
+ ->withOAuth2Credential($oAuth2Credential)
+ ->build();
+
+ try {
+ self::runExample(
+ $googleAdsClient,
+ $options[ArgumentNames::CUSTOMER_ID] ?: self::CUSTOMER_ID,
+ $options[ArgumentNames::CAMPAIGN_ID] ?: self::CAMPAIGN_ID
+ );
+ } catch (GoogleAdsException $googleAdsException) {
+ printf(
+ "Request with ID '%s' has failed.%sGoogle Ads failure details:%s",
+ $googleAdsException->getRequestId(),
+ PHP_EOL,
+ PHP_EOL
+ );
+ foreach ($googleAdsException->getGoogleAdsFailure()->getErrors() as $error) {
+ /** @var GoogleAdsError $error */
+ printf(
+ "\t%s: %s%s",
+ $error->getErrorCode()->getErrorCode(),
+ $error->getMessage(),
+ PHP_EOL
+ );
+ }
+ } catch (ApiException $apiException) {
+ printf(
+ "ApiException was thrown with message '%s'.%s",
+ $apiException->getMessage(),
+ PHP_EOL
+ );
+ }
+ }
+
+ /**
+ * Runs the example.
+ *
+ * @param GoogleAdsClient $googleAdsClient the Google Ads API client
+ * @param int $customerId the client customer ID without hyphens
+ * @param int $campaignId the ID of the campaign to remove
+ */
+ public static function runExample(GoogleAdsClient $googleAdsClient, $customerId, $campaignId)
+ {
+ // Creates the resource name of a campaign to remove.
+ $campaignResourceName = ResourceNames::forCampaign($customerId, $campaignId);
+
+ // Creates a campaign operation.
+ $campaignOperation = new CampaignOperation();
+ $campaignOperation->setRemove($campaignResourceName);
+
+ // Issues a mutate request to remove the campaign.
+ $campaignServiceClient = $googleAdsClient->getCampaignServiceClient();
+ $response = $campaignServiceClient->mutateCampaigns($customerId, [$campaignOperation]);
+
+ /** @var Campaign $removedCampaign */
+ $removedCampaign = $response->getResults()[0];
+ printf(
+ "Removed campaign with resource name '%s'%s",
+ $removedCampaign->getResourceName(),
+ PHP_EOL
+ );
+ }
+}
+
+RemoveCampaign::main();
diff --git a/examples/BasicOperations/RemoveKeyword.php b/examples/BasicOperations/RemoveKeyword.php
new file mode 100644
index 000000000..8eef78754
--- /dev/null
+++ b/examples/BasicOperations/RemoveKeyword.php
@@ -0,0 +1,137 @@
+ GetOpt::REQUIRED_ARGUMENT,
+ ArgumentNames::AD_GROUP_ID => GetOpt::REQUIRED_ARGUMENT,
+ ArgumentNames::CRITERION_ID => GetOpt::REQUIRED_ARGUMENT
+ ]);
+
+ // Generate a refreshable OAuth2 credential for authentication.
+ $oAuth2Credential = (new OAuth2TokenBuilder())->fromFile()->build();
+
+ // Construct a Google Ads client configured from a properties file and the
+ // OAuth2 credentials above.
+ $googleAdsClient = (new GoogleAdsClientBuilder())->fromFile()
+ ->withOAuth2Credential($oAuth2Credential)
+ ->build();
+
+ try {
+ self::runExample(
+ $googleAdsClient,
+ $options[ArgumentNames::CUSTOMER_ID] ?: self::CUSTOMER_ID,
+ $options[ArgumentNames::AD_GROUP_ID] ?: self::AD_GROUP_ID,
+ $options[ArgumentNames::CRITERION_ID] ?: self::CRITERION_ID
+ );
+ } catch (GoogleAdsException $googleAdsException) {
+ printf(
+ "Request with ID '%s' has failed.%sGoogle Ads failure details:%s",
+ $googleAdsException->getRequestId(),
+ PHP_EOL,
+ PHP_EOL
+ );
+ foreach ($googleAdsException->getGoogleAdsFailure()->getErrors() as $error) {
+ /** @var GoogleAdsError $error */
+ printf(
+ "\t%s: %s%s",
+ $error->getErrorCode()->getErrorCode(),
+ $error->getMessage(),
+ PHP_EOL
+ );
+ }
+ } catch (ApiException $apiException) {
+ printf(
+ "ApiException was thrown with message '%s'.%s",
+ $apiException->getMessage(),
+ PHP_EOL
+ );
+ }
+ }
+
+ /**
+ * Runs the example.
+ *
+ * @param GoogleAdsClient $googleAdsClient the Google Ads API client
+ * @param int $customerId the client customer ID without hyphens
+ * @param int $adGroupId the ad group ID that the ad group criterion belongs to
+ * @param int $criterionId the ID of the ad group criterion to remove
+ */
+ public static function runExample(
+ GoogleAdsClient $googleAdsClient,
+ $customerId,
+ $adGroupId,
+ $criterionId
+ ) {
+ // Creates ad group criterion resource name.
+ $adGroupCriterionResourceName =
+ ResourceNames::forAdGroupCriterion($customerId, $adGroupId, $criterionId);
+
+ // Constructs an operation that will remove the keyword with the specified resource name.
+ $adGroupCriterionOperation = new AdGroupCriterionOperation();
+ $adGroupCriterionOperation->setRemove($adGroupCriterionResourceName);
+
+ // Issues a mutate request to remove the ad group criterion.
+ $adGroupCriterionServiceClient = $googleAdsClient->getAdGroupCriterionServiceClient();
+ $response = $adGroupCriterionServiceClient->mutateAdGroupCriteria(
+ $customerId,
+ [$adGroupCriterionOperation]
+ );
+
+ // Prints the resource name of the removed ad group criterion.
+ /** @var AdGroupCriterion $removedAdGroupCriterion */
+ $removedAdGroupCriterion = $response->getResults()[0];
+ printf(
+ "Removed ad group criterion with resource name: '%s'%s",
+ $removedAdGroupCriterion->getResourceName(),
+ PHP_EOL
+ );
+ }
+}
+
+RemoveKeyword::main();
diff --git a/examples/BasicOperations/UpdateAdGroup.php b/examples/BasicOperations/UpdateAdGroup.php
new file mode 100644
index 000000000..4d72cf0de
--- /dev/null
+++ b/examples/BasicOperations/UpdateAdGroup.php
@@ -0,0 +1,149 @@
+ GetOpt::REQUIRED_ARGUMENT,
+ ArgumentNames::AD_GROUP_ID => GetOpt::REQUIRED_ARGUMENT,
+ ArgumentNames::CPC_BID_MICRO_AMOUNT => GetOpt::REQUIRED_ARGUMENT
+ ]);
+
+ // Generate a refreshable OAuth2 credential for authentication.
+ $oAuth2Credential = (new OAuth2TokenBuilder())->fromFile()->build();
+
+ // Construct a Google Ads client configured from a properties file and the
+ // OAuth2 credentials above.
+ $googleAdsClient = (new GoogleAdsClientBuilder())->fromFile()
+ ->withOAuth2Credential($oAuth2Credential)
+ ->build();
+
+ try {
+ self::runExample(
+ $googleAdsClient,
+ $options[ArgumentNames::CUSTOMER_ID] ?: self::CUSTOMER_ID,
+ $options[ArgumentNames::AD_GROUP_ID] ?: self::AD_GROUP_ID,
+ $options[ArgumentNames::CPC_BID_MICRO_AMOUNT] ?: self::CPC_BID_MICRO_AMOUNT
+ );
+ } catch (GoogleAdsException $googleAdsException) {
+ printf(
+ "Request with ID '%s' has failed.%sGoogle Ads failure details:%s",
+ $googleAdsException->getRequestId(),
+ PHP_EOL,
+ PHP_EOL
+ );
+ foreach ($googleAdsException->getGoogleAdsFailure()->getErrors() as $error) {
+ /** @var GoogleAdsError $error */
+ printf(
+ "\t%s: %s%s",
+ $error->getErrorCode()->getErrorCode(),
+ $error->getMessage(),
+ PHP_EOL
+ );
+ }
+ } catch (ApiException $apiException) {
+ printf(
+ "ApiException was thrown with message '%s'.%s",
+ $apiException->getMessage(),
+ PHP_EOL
+ );
+ }
+ }
+
+ /**
+ * Runs the example.
+ *
+ * @param GoogleAdsClient $googleAdsClient the Google Ads API client
+ * @param int $customerId the client customer ID without hyphens
+ * @param int $adGroupId the ID of ad group to update
+ * @param int $cpcBidMicroAmount the bid amount in micros to use for the ad group bid
+ */
+ public static function runExample(
+ GoogleAdsClient $googleAdsClient,
+ $customerId,
+ $adGroupId,
+ $cpcBidMicroAmount
+ ) {
+ // Creates ad group resource name.
+ $adGroupResourceName = ResourceNames::forAdGroup($customerId, $adGroupId);
+
+ // Creates an ad group object with the specified resource name and other changes.
+ $adGroup = new AdGroup();
+ $adGroup->setResourceName($adGroupResourceName);
+ $wrappedCpcBidMicroAmount = new Int64Value();
+ $wrappedCpcBidMicroAmount->setValue($cpcBidMicroAmount);
+ $adGroup->setCpcBidMicros($wrappedCpcBidMicroAmount);
+ $adGroup->setStatus(AdGroupStatusEnum_AdGroupStatus::PAUSED);
+
+ // Constructs an operation that will update the ad group with the specified resource name,
+ // using the FieldMasks utility to derive the update mask. This mask tells the Google Ads
+ // API which attributes of the ad group you want to change.
+ $adGroupOperation = new AdGroupOperation();
+ $adGroupOperation->setUpdate($adGroup);
+ $adGroupOperation->setUpdateMask(FieldMasks::allSetFieldsOf($adGroup));
+
+ // Issues a mutate request to update the ad group.
+ $adGroupServiceClient = $googleAdsClient->getAdGroupServiceClient();
+ $response = $adGroupServiceClient->mutateAdGroups(
+ $customerId,
+ [$adGroupOperation]
+ );
+
+ // Prints the resource name of the updated ad group.
+ /** @var AdGroup $updatedAdGroup */
+ $updatedAdGroup = $response->getResults()[0];
+ printf(
+ "Updated ad group with resource name: '%s'%s",
+ $updatedAdGroup->getResourceName(),
+ PHP_EOL
+ );
+ }
+}
+
+UpdateAdGroup::main();
diff --git a/examples/BasicOperations/UpdateCampaign.php b/examples/BasicOperations/UpdateCampaign.php
new file mode 100644
index 000000000..97d410316
--- /dev/null
+++ b/examples/BasicOperations/UpdateCampaign.php
@@ -0,0 +1,140 @@
+ GetOpt::REQUIRED_ARGUMENT,
+ ArgumentNames::CAMPAIGN_ID => GetOpt::REQUIRED_ARGUMENT
+ ]);
+
+ // Generate a refreshable OAuth2 credential for authentication.
+ $oAuth2Credential = (new OAuth2TokenBuilder())->fromFile()->build();
+
+ // Construct a Google Ads client configured from a properties file and the
+ // OAuth2 credentials above.
+ $googleAdsClient = (new GoogleAdsClientBuilder())->fromFile()
+ ->withOAuth2Credential($oAuth2Credential)
+ ->build();
+
+ try {
+ self::runExample(
+ $googleAdsClient,
+ $options[ArgumentNames::CUSTOMER_ID] ?: self::CUSTOMER_ID,
+ $options[ArgumentNames::CAMPAIGN_ID] ?: self::CAMPAIGN_ID
+ );
+ } catch (GoogleAdsException $googleAdsException) {
+ printf(
+ "Request with ID '%s' has failed.%sGoogle Ads failure details:%s",
+ $googleAdsException->getRequestId(),
+ PHP_EOL,
+ PHP_EOL
+ );
+ foreach ($googleAdsException->getGoogleAdsFailure()->getErrors() as $error) {
+ /** @var GoogleAdsError $error */
+ printf(
+ "\t%s: %s%s",
+ $error->getErrorCode()->getErrorCode(),
+ $error->getMessage(),
+ PHP_EOL
+ );
+ }
+ } catch (ApiException $apiException) {
+ printf(
+ "ApiException was thrown with message '%s'.%s",
+ $apiException->getMessage(),
+ PHP_EOL
+ );
+ }
+ }
+
+ /**
+ * Runs the example.
+ *
+ * @param GoogleAdsClient $googleAdsClient the Google Ads API client
+ * @param int $customerId the client customer ID without hyphens
+ * @param int $campaignId the ID of campaign to update
+ */
+ public static function runExample(
+ GoogleAdsClient $googleAdsClient,
+ $customerId,
+ $campaignId
+ ) {
+ // Creates campaign resource name.
+ $campaignResourceName = ResourceNames::forCampaign($customerId, $campaignId);
+
+ // Creates a campaign object with the specified resource name and other changes.
+ $campaign = new Campaign();
+ $campaign->setResourceName($campaignResourceName);
+ $campaign->setStatus(CampaignStatusEnum_CampaignStatus::PAUSED);
+
+ // Constructs an operation that will update the campaign with the specified resource name,
+ // using the FieldMasks utility to derive the update mask. This mask tells the Google Ads
+ // API which attributes of the campaign you want to change.
+ $campaignOperation = new CampaignOperation();
+ $campaignOperation->setUpdate($campaign);
+ $campaignOperation->setUpdateMask(FieldMasks::allSetFieldsOf($campaign));
+
+ // Issues a mutate request to update the campaign.
+ $campaignServiceClient = $googleAdsClient->getCampaignServiceClient();
+ $response = $campaignServiceClient->mutateCampaigns(
+ $customerId,
+ [$campaignOperation]
+ );
+
+ // Prints the resource name of the updated campaign.
+ /** @var Campaign $updatedCampaign */
+ $updatedCampaign = $response->getResults()[0];
+ printf(
+ "Updated campaign with resource name: '%s'%s",
+ $updatedCampaign->getResourceName(),
+ PHP_EOL
+ );
+ }
+}
+
+UpdateCampaign::main();
diff --git a/examples/BasicOperations/UpdateKeyword.php b/examples/BasicOperations/UpdateKeyword.php
new file mode 100644
index 000000000..17b81bdb4
--- /dev/null
+++ b/examples/BasicOperations/UpdateKeyword.php
@@ -0,0 +1,151 @@
+ GetOpt::REQUIRED_ARGUMENT,
+ ArgumentNames::AD_GROUP_ID => GetOpt::REQUIRED_ARGUMENT,
+ ArgumentNames::CRITERION_ID => GetOpt::REQUIRED_ARGUMENT
+ ]);
+
+ // Generate a refreshable OAuth2 credential for authentication.
+ $oAuth2Credential = (new OAuth2TokenBuilder())->fromFile()->build();
+
+ // Construct a Google Ads client configured from a properties file and the
+ // OAuth2 credentials above.
+ $googleAdsClient = (new GoogleAdsClientBuilder())->fromFile()
+ ->withOAuth2Credential($oAuth2Credential)
+ ->build();
+
+ try {
+ self::runExample(
+ $googleAdsClient,
+ $options[ArgumentNames::CUSTOMER_ID] ?: self::CUSTOMER_ID,
+ $options[ArgumentNames::AD_GROUP_ID] ?: self::AD_GROUP_ID,
+ $options[ArgumentNames::CRITERION_ID] ?: self::CRITERION_ID
+ );
+ } catch (GoogleAdsException $googleAdsException) {
+ printf(
+ "Request with ID '%s' has failed.%sGoogle Ads failure details:%s",
+ $googleAdsException->getRequestId(),
+ PHP_EOL,
+ PHP_EOL
+ );
+ foreach ($googleAdsException->getGoogleAdsFailure()->getErrors() as $error) {
+ /** @var GoogleAdsError $error */
+ printf(
+ "\t%s: %s%s",
+ $error->getErrorCode()->getErrorCode(),
+ $error->getMessage(),
+ PHP_EOL
+ );
+ }
+ } catch (ApiException $apiException) {
+ printf(
+ "ApiException was thrown with message '%s'.%s",
+ $apiException->getMessage(),
+ PHP_EOL
+ );
+ }
+ }
+
+ /**
+ * Runs the example.
+ *
+ * @param GoogleAdsClient $googleAdsClient the Google Ads API client
+ * @param int $customerId the client customer ID without hyphens
+ * @param int $adGroupId the ad group ID that the criterion ID belongs to
+ * @param int $criterionId the ID of the ad group criterion to update
+ */
+ public static function runExample(
+ GoogleAdsClient $googleAdsClient,
+ $customerId,
+ $adGroupId,
+ $criterionId
+ ) {
+ // Creates ad group criterion resource name.
+ $adGroupCriterionResourceName =
+ ResourceNames::forAdGroupCriterion($customerId, $adGroupId, $criterionId);
+
+ // Creates an ad group criterion with the proper resource name and any other changes.
+ $adGroupCriterion = new AdGroupCriterion();
+ $adGroupCriterion->setResourceName($adGroupCriterionResourceName);
+ $adGroupCriterion->setStatus(AdGroupCriterionStatusEnum_AdGroupCriterionStatus::ENABLED);
+ $wrappedFinalUrl = new StringValue();
+ $wrappedFinalUrl->setValue('https://www.example.com');
+ $adGroupCriterion->setFinalUrls([$wrappedFinalUrl]);
+
+ // Constructs an operation that will update the ad group criterion, using the FieldMasks
+ // utility to derive the update mask. This mask tells the Google Ads API which attributes of
+ // the ad group criterion you want to change.
+ $adGroupCriterionOperation = new AdGroupCriterionOperation();
+ $adGroupCriterionOperation->setUpdate($adGroupCriterion);
+ $adGroupCriterionOperation->setUpdateMask(FieldMasks::allSetFieldsOf($adGroupCriterion));
+
+ // Issues a mutate request to update the ad group criterion.
+ $adGroupCriterionServiceClient = $googleAdsClient->getAdGroupCriterionServiceClient();
+ $response = $adGroupCriterionServiceClient->mutateAdGroupCriteria(
+ $customerId,
+ [$adGroupCriterionOperation]
+ );
+
+ // Prints the resource name of the updated ad group criterion.
+ /** @var AdGroupCriterion $updatedAdGroupCriterion */
+ $updatedAdGroupCriterion = $response->getResults()[0];
+ printf(
+ "Updated ad group criterion with resource name: '%s'%s",
+ $updatedAdGroupCriterion->getResourceName(),
+ PHP_EOL
+ );
+ }
+}
+
+UpdateKeyword::main();
diff --git a/examples/HotelAds/AddHotelAd.php b/examples/HotelAds/AddHotelAd.php
new file mode 100644
index 000000000..18ec67c79
--- /dev/null
+++ b/examples/HotelAds/AddHotelAd.php
@@ -0,0 +1,370 @@
+ Prerequisite: You need to have an access to the Hotel Ads Center, which can be granted during
+ * integration with Google Hotels. The integration instructions can be found at:
+ * https://support.google.com/hotelprices/answer/6101897.
+ */
+class AddHotelAds
+{
+ const CUSTOMER_ID = 'INSERT_CUSTOMER_ID_HERE';
+ // Specify your Hotels account ID below. You can see how to find the account ID in the Hotel
+ // Ads Center at: https://support.google.com/hotelprices/answer/6399770.
+ // This ID is the same account ID that you use in API requests to the Travel Partner APIs
+ // (https://developers.google.com/hotels/hotel-ads/api-reference/).
+ const HOTEL_CENTER_ACCOUNT_ID = 'INSERT_HOTEL_CENTER_ACCOUNT_ID_HERE';
+
+ public static function main()
+ {
+ // Either pass the required parameters for this example on the command line, or insert them
+ // into the constants above.
+ $options = ArgumentParser::parseCommandArguments([
+ ArgumentNames::CUSTOMER_ID => GetOpt::REQUIRED_ARGUMENT,
+ ArgumentNames::HOTEL_CENTER_ACCOUNT_ID => GetOpt::REQUIRED_ARGUMENT
+ ]);
+
+ // Generate a refreshable OAuth2 credential for authentication.
+ $oAuth2Credential = (new OAuth2TokenBuilder())->fromFile()->build();
+
+ // Construct a Google Ads client configured from a properties file and the
+ // OAuth2 credentials above.
+ $googleAdsClient = (new GoogleAdsClientBuilder())->fromFile()
+ ->withOAuth2Credential($oAuth2Credential)
+ ->build();
+
+ try {
+ self::runExample(
+ $googleAdsClient,
+ $options[ArgumentNames::CUSTOMER_ID] ?: self::CUSTOMER_ID,
+ $options[ArgumentNames::HOTEL_CENTER_ACCOUNT_ID] ?: self::HOTEL_CENTER_ACCOUNT_ID
+ );
+ } catch (GoogleAdsException $googleAdsException) {
+ printf(
+ "Request with ID '%s' has failed.%sGoogle Ads failure details:%s",
+ $googleAdsException->getRequestId(),
+ PHP_EOL,
+ PHP_EOL
+ );
+ foreach ($googleAdsException->getGoogleAdsFailure()->getErrors() as $error) {
+ /** @var GoogleAdsError $error */
+ printf(
+ "\t%s: %s%s",
+ $error->getErrorCode()->getErrorCode(),
+ $error->getMessage(),
+ PHP_EOL
+ );
+ }
+ } catch (ApiException $apiException) {
+ printf(
+ "ApiException was thrown with message '%s'.%s",
+ $apiException->getMessage(),
+ PHP_EOL
+ );
+ }
+ }
+
+ /**
+ * Runs the example.
+ *
+ * @param GoogleAdsClient $googleAdsClient the Google Ads API client
+ * @param int $customerId the client customer ID without hyphens
+ * @param int $hotelCenterAccountId the Hotel Center account ID
+ */
+ public static function runExample(
+ GoogleAdsClient $googleAdsClient,
+ $customerId,
+ $hotelCenterAccountId
+ ) {
+ // Creates a budget to be used by the campaign that will be created below.
+ $budgetResourceName = self::addCampaignBudget($googleAdsClient, $customerId);
+ // Creates a hotel campaign.
+ $campaignResourceName = self::addHotelCampaign(
+ $googleAdsClient,
+ $customerId,
+ $budgetResourceName,
+ $hotelCenterAccountId
+ );
+ // Creates a hotel ad group.
+ $adGroupResourceName =
+ self::addHotelAdGroup($googleAdsClient, $customerId, $campaignResourceName);
+ // Creates a hotel ad group ad.
+ self::addHotelAdGroupAd($googleAdsClient, $customerId, $adGroupResourceName);
+ }
+
+ /**
+ * Creates a new campaign budget in the specified client account.
+ *
+ * @param GoogleAdsClient $googleAdsClient the Google Ads API client
+ * @param int $customerId the client customer ID
+ * @return string the resource name of the newly created budget
+ */
+ private static function addCampaignBudget(GoogleAdsClient $googleAdsClient, $customerId)
+ {
+ // Creates a campaign budget.
+ $budget = new CampaignBudget();
+
+ $wrappedName = new StringValue();
+ $wrappedName->setValue('Interplanetary Cruise Budget #' . uniqid());
+ $budget->setName($wrappedName);
+
+ $budget->setDeliveryMethod(BudgetDeliveryMethodEnum_BudgetDeliveryMethod::STANDARD);
+
+ // Sets the amount of budget.
+ $wrappedAmountMicros = new Int64Value();
+ $wrappedAmountMicros->setValue(50000000);
+ $budget->setAmountMicros($wrappedAmountMicros);
+
+ // Creates a campaign budget operation.
+ $campaignBudgetOperation = new CampaignBudgetOperation();
+ $campaignBudgetOperation->setCreate($budget);
+
+ // Issues a mutate request.
+ $campaignBudgetServiceClient = $googleAdsClient->getCampaignBudgetServiceClient();
+ $response = $campaignBudgetServiceClient->mutateCampaignBudgets(
+ $customerId,
+ [$campaignBudgetOperation]
+ );
+
+ /** @var CampaignBudget $addedBudget */
+ $addedBudget = $response->getResults()[0];
+ printf(
+ "Added a budget with resource name '%s'.%s",
+ $addedBudget->getResourceName(),
+ PHP_EOL
+ );
+
+ return $addedBudget->getResourceName();
+ }
+
+ /**
+ * Creates a new hotel campaign in the specified client account.
+ *
+ * @param GoogleAdsClient $googleAdsClient the Google Ads API client
+ * @param int $customerId the client customer ID
+ * @param string $budgetResourceName the resource name of budget for a new campaign
+ * @param int $hotelCenterAccountId the Hotel Center account ID
+ * @return string the resource name of the newly created campaign
+ */
+ // [START addHotelCampaign]
+ private static function addHotelCampaign(
+ GoogleAdsClient $googleAdsClient,
+ $customerId,
+ $budgetResourceName,
+ $hotelCenterAccountId
+ ) {
+ // Creates a campaign.
+ $campaign = new Campaign();
+
+ $wrappedName = new StringValue();
+ $wrappedName->setValue('Interplanetary Cruise Campaign #' . uniqid());
+ $campaign->setName($wrappedName);
+
+ // Configures settings related to hotel campaigns including advertising channel type
+ // and hotel setting info.
+ $campaign->setAdvertisingChannelType(
+ AdvertisingChannelTypeEnum_AdvertisingChannelType::HOTEL
+ );
+ $wrappedHotelCenterId = new Int64Value();
+ $wrappedHotelCenterId->setValue($hotelCenterAccountId);
+ $hotelSettingInfo = new Campaign_HotelSettingInfo();
+ $hotelSettingInfo->setHotelCenterId($wrappedHotelCenterId);
+ $campaign->setHotelSetting($hotelSettingInfo);
+
+ // Recommendation: Set the campaign to PAUSED when creating it to prevent
+ // the ads from immediately serving. Set to ENABLED once you've added
+ // targeting and the ads are ready to serve.
+ $campaign->setStatus(CampaignStatusEnum_CampaignStatus::PAUSED);
+ // Sets the bidding strategy. Only Manual CPC can be used for hotel campaigns.
+ $campaign->setManualCpc(new ManualCpc());
+
+ // Sets the budget.
+ $wrappedBudgetResourceName = new StringValue();
+ $wrappedBudgetResourceName->setValue($budgetResourceName);
+ $campaign->setCampaignBudget($wrappedBudgetResourceName);
+
+ // Configures the campaign network options. Only Google Search is allowed for
+ // hotel campaigns.
+ $wrappedTrueValue = new BoolValue();
+ $wrappedTrueValue->setValue(true);
+ $networkSettings = new Campaign_NetworkSettings();
+ $networkSettings->setTargetGoogleSearch($wrappedTrueValue);
+ $campaign->setNetworkSettings($networkSettings);
+
+ // Creates a campaign operation.
+ $campaignOperation = new CampaignOperation();
+ $campaignOperation->setCreate($campaign);
+
+ // Issues a mutate request to add campaigns.
+ $campaignServiceClient = $googleAdsClient->getCampaignServiceClient();
+ $response = $campaignServiceClient->mutateCampaigns($customerId, [$campaignOperation]);
+
+ /** @var Campaign $addedCampaign */
+ $addedCampaign = $response->getResults()[0];
+ printf(
+ "Added a hotel campaign with resource name '%s'.%s",
+ $addedCampaign->getResourceName(),
+ PHP_EOL
+ );
+
+ return $addedCampaign->getResourceName();
+ }
+ // [END addHotelCampaign]
+
+ /**
+ * Creates a new hotel ad group in the specified campaign.
+ *
+ * @param GoogleAdsClient $googleAdsClient the Google Ads API client
+ * @param int $customerId the client customer ID
+ * @param string $campaignResourceName the resource name of campaign that a new ad group will
+ * belong to
+ * @return string the resource name of the newly created ad group
+ */
+ // [START addHotelAdGroup]
+ private static function addHotelAdGroup(
+ GoogleAdsClient $googleAdsClient,
+ $customerId,
+ $campaignResourceName
+ ) {
+ // Creates an ad group.
+ $adGroup = new AdGroup();
+
+ $wrappedName = new StringValue();
+ $wrappedName->setValue('Earth to Mars Cruise #' . uniqid());
+ $adGroup->setName($wrappedName);
+
+ // Sets the campaign.
+ $wrappedCampaignResourceName = new StringValue();
+ $wrappedCampaignResourceName->setValue($campaignResourceName);
+ $adGroup->setCampaign($wrappedCampaignResourceName);
+
+ // Sets the ad group type to HOTEL_ADS.
+ // This cannot be set to other types.
+ $adGroup->setType(AdGroupTypeEnum_AdGroupType::HOTEL_ADS);
+
+ $wrappedCpcBidMicros = new Int64Value();
+ $wrappedCpcBidMicros->setValue(10000000);
+ $adGroup->setCpcBidMicros($wrappedCpcBidMicros);
+
+ $adGroup->setStatus(AdGroupStatusEnum_AdGroupStatus::ENABLED);
+
+ // Creates an ad group operation.
+ $adGroupOperation = new AdGroupOperation();
+ $adGroupOperation->setCreate($adGroup);
+
+ // Issues a mutate request to add an ad group.
+ $adGroupServiceClient = $googleAdsClient->getAdGroupServiceClient();
+ $response = $adGroupServiceClient->mutateAdGroups($customerId, [$adGroupOperation]);
+
+ /** @var AdGroup $addedAdGroup */
+ $addedAdGroup = $response->getResults()[0];
+ printf(
+ "Added a hotel ad group with resource name '%s'.%s",
+ $addedAdGroup->getResourceName(),
+ PHP_EOL
+ );
+
+ return $addedAdGroup->getResourceName();
+ }
+ // [END addHotelAdGroup]
+
+ /**
+ * Creates a new hotel ad group ad in the specified ad group.
+ *
+ * @param GoogleAdsClient $googleAdsClient the Google Ads API client
+ * @param int $customerId the client customer ID
+ * @param string $adGroupResourceName the resource name of ad group that a new ad group ad will
+ * belong to
+ */
+ // [START addHotelAdGroupAd]
+ private static function addHotelAdGroupAd(
+ GoogleAdsClient $googleAdsClient,
+ $customerId,
+ $adGroupResourceName
+ ) {
+ // Creates a new hotel ad.
+ $ad = new Ad();
+ $ad->setHotelAd(new HotelAdInfo());
+
+ // Creates a new ad group ad and sets the hotel ad to it.
+ $adGroupAd = new AdGroupAd();
+ $adGroupAd->setAd($ad);
+ $adGroupAd->setStatus(AdGroupAdStatusEnum_AdGroupAdStatus::PAUSED);
+
+ // Sets the ad group.
+ $wrappedAdGroupResourceName = new StringValue();
+ $wrappedAdGroupResourceName->setValue($adGroupResourceName);
+ $adGroupAd->setAdGroup($wrappedAdGroupResourceName);
+
+ // Creates an ad group ad operation.
+ $adGroupAdOperation = new AdGroupAdOperation();
+ $adGroupAdOperation->setCreate($adGroupAd);
+
+ // Issues a mutate request to add an ad group ad.
+ $adGroupAdServiceClient = $googleAdsClient->getAdGroupAdServiceClient();
+ $response = $adGroupAdServiceClient->mutateAdGroupAds($customerId, [$adGroupAdOperation]);
+
+ /** @var AdGroupAd $addedAdGroupAd */
+ $addedAdGroupAd = $response->getResults()[0];
+ printf(
+ "Added a hotel ad group ad with resource name '%s'.%s",
+ $addedAdGroupAd->getResourceName(),
+ PHP_EOL
+ );
+ }
+ // [END addHotelAdGroupAd]
+}
+
+AddHotelAds::main();
diff --git a/examples/HotelAds/AddHotelAdGroupBidModifiers.php b/examples/HotelAds/AddHotelAdGroupBidModifiers.php
new file mode 100644
index 000000000..636df1507
--- /dev/null
+++ b/examples/HotelAds/AddHotelAdGroupBidModifiers.php
@@ -0,0 +1,206 @@
+ GetOpt::REQUIRED_ARGUMENT,
+ ArgumentNames::AD_GROUP_ID => GetOpt::REQUIRED_ARGUMENT,
+ ArgumentNames::CHECK_IN_DAY_CRITERION_ID => GetOpt::OPTIONAL_ARGUMENT
+ ]);
+
+ // Generate a refreshable OAuth2 credential for authentication.
+ $oAuth2Credential = (new OAuth2TokenBuilder())->fromFile()->build();
+
+ // Construct a Google Ads client configured from a properties file and the
+ // OAuth2 credentials above.
+ $googleAdsClient = (new GoogleAdsClientBuilder())->fromFile()
+ ->withOAuth2Credential($oAuth2Credential)
+ ->build();
+
+ try {
+ self::runExample(
+ $googleAdsClient,
+ $options[ArgumentNames::CUSTOMER_ID] ?: self::CUSTOMER_ID,
+ $options[ArgumentNames::AD_GROUP_ID] ?: self::AD_GROUP_ID,
+ $options[ArgumentNames::CHECK_IN_DAY_CRITERION_ID]
+ ?: self::CHECK_IN_DAY_CRITERION_ID
+ );
+ } catch (GoogleAdsException $googleAdsException) {
+ printf(
+ "Request with ID '%s' has failed.%sGoogle Ads failure details:%s",
+ $googleAdsException->getRequestId(),
+ PHP_EOL,
+ PHP_EOL
+ );
+ foreach ($googleAdsException->getGoogleAdsFailure()->getErrors() as $error) {
+ /** @var GoogleAdsError $error */
+ printf(
+ "\t%s: %s%s",
+ $error->getErrorCode()->getErrorCode(),
+ $error->getMessage(),
+ PHP_EOL
+ );
+ }
+ } catch (ApiException $apiException) {
+ printf(
+ "ApiException was thrown with message '%s'.%s",
+ $apiException->getMessage(),
+ PHP_EOL
+ );
+ }
+ }
+
+ /**
+ * Runs the example.
+ *
+ * @param GoogleAdsClient $googleAdsClient the Google Ads API client
+ * @param int $customerId the client customer ID without hyphens
+ * @param int $adGroupId the ad group ID
+ * @param int $checkInDayCriterionId the criterion ID of the hotel check-in day to set
+ * a bid modifier for
+ */
+ // [START addHotelAdGroupBidModifiers]
+ public static function runExample(
+ GoogleAdsClient $googleAdsClient,
+ $customerId,
+ $adGroupId,
+ $checkInDayCriterionId
+ ) {
+ $operations = [];
+
+ // 1) Creates an ad group bid modifier based on the hotel check-in day.
+ $checkInDayAdGroupBidModifier = new AdGroupBidModifier();
+
+ // Sets the resource name for the criterion ID whose value corresponds to the desired
+ // check-in day.
+ $checkInDayResourceName = ResourceNames::forAdGroupBidModifier(
+ $customerId,
+ $adGroupId,
+ $checkInDayCriterionId
+ );
+ $checkInDayAdGroupBidModifier->setResourceName($checkInDayResourceName);
+
+ // Sets the bid modifier value to 150%.
+ $wrappedBidModifierValue = new DoubleValue();
+ $wrappedBidModifierValue->setValue(1.5);
+ $checkInDayAdGroupBidModifier->setBidModifier($wrappedBidModifierValue);
+ $checkInDayAdGroupBidModifier->setHotelCheckInDay(new HotelCheckInDayInfo());
+
+ // Creates an ad group bid modifier operation.
+ $checkInDayAdGroupBidModifierOperation = new AdGroupBidModifierOperation();
+ $checkInDayAdGroupBidModifierOperation->setCreate($checkInDayAdGroupBidModifier);
+ $operations[] = $checkInDayAdGroupBidModifierOperation;
+
+ // 2) Creates an ad group bid modifier based on the hotel length of stay.
+ $lengthOfStayAdGroupBidModifier = new AdGroupBidModifier();
+
+ // Sets the ad group.
+ $wrappedAdGroupResourceName = new StringValue();
+ $wrappedAdGroupResourceName->setValue(ResourceNames::forAdGroup($customerId, $adGroupId));
+ $lengthOfStayAdGroupBidModifier->setAdGroup($wrappedAdGroupResourceName);
+
+ // Creates the hotel length of stay info.
+ $lengthOfStayInfo = new HotelLengthOfStayInfo();
+ $wrappedMinNights = new Int64Value();
+ $wrappedMinNights->setValue(3);
+ $lengthOfStayInfo->setMinNights($wrappedMinNights);
+ $wrappedMaxNights = new Int64Value();
+ $wrappedMaxNights->setValue(7);
+ $lengthOfStayInfo->setMaxNights($wrappedMaxNights);
+ $lengthOfStayAdGroupBidModifier->setHotelLengthOfStay($lengthOfStayInfo);
+
+ // Sets the bid modifier value to 170%.
+ $wrappedBidModifierValue = new DoubleValue();
+ $wrappedBidModifierValue->setValue(1.7);
+ $lengthOfStayAdGroupBidModifier->setBidModifier($wrappedBidModifierValue);
+
+ // Creates an ad group bid modifier operation.
+ $lengthOfStayAdGroupBidModifierOperation = new AdGroupBidModifierOperation();
+ $lengthOfStayAdGroupBidModifierOperation->setCreate(
+ $lengthOfStayAdGroupBidModifier
+ );
+ $operations[] = $lengthOfStayAdGroupBidModifierOperation;
+
+ // Issues a mutate request to add an ad group bid modifiers.
+ $adGroupBidModifierServiceClient = $googleAdsClient->getAdGroupBidModifierServiceClient();
+ $response = $adGroupBidModifierServiceClient->mutateAdGroupBidModifiers(
+ $customerId,
+ $operations
+ );
+
+ // Print out resource names of the added ad group bid modifiers.
+ printf(
+ "Added %d hotel ad group bid modifiers:%s",
+ $response->getResults()->count(),
+ PHP_EOL
+ );
+ foreach ($response->getResults() as $addedAdGroupBidModifier) {
+ /** @var AdGroupBidModifier $addedAdGroupBidModifier */
+ print $addedAdGroupBidModifier->getResourceName() . PHP_EOL;
+ }
+ }
+ // [END addHotelAdGroupBidModifiers]
+}
+
+AddHotelAdGroupBidModifiers::main();
diff --git a/examples/HotelAds/AddHotelListingGroupTree.php b/examples/HotelAds/AddHotelListingGroupTree.php
new file mode 100644
index 000000000..db8700692
--- /dev/null
+++ b/examples/HotelAds/AddHotelListingGroupTree.php
@@ -0,0 +1,418 @@
+ GetOpt::REQUIRED_ARGUMENT,
+ ArgumentNames::AD_GROUP_ID => GetOpt::REQUIRED_ARGUMENT,
+ ArgumentNames::CPC_BID_MICRO_AMOUNT => GetOpt::OPTIONAL_ARGUMENT
+ ]);
+
+ // Generate a refreshable OAuth2 credential for authentication.
+ $oAuth2Credential = (new OAuth2TokenBuilder())->fromFile()->build();
+
+ // Construct a Google Ads client configured from a properties file and the
+ // OAuth2 credentials above.
+ $googleAdsClient = (new GoogleAdsClientBuilder())->fromFile()
+ ->withOAuth2Credential($oAuth2Credential)
+ ->build();
+
+ try {
+ self::runExample(
+ $googleAdsClient,
+ $options[ArgumentNames::CUSTOMER_ID] ?: self::CUSTOMER_ID,
+ $options[ArgumentNames::AD_GROUP_ID] ?: self::AD_GROUP_ID,
+ $options[ArgumentNames::CPC_BID_MICRO_AMOUNT] ?: self::CPC_BID_MICRO_AMOUNT
+ );
+ } catch (GoogleAdsException $googleAdsException) {
+ printf(
+ "Request with ID '%s' has failed.%sGoogle Ads failure details:%s",
+ $googleAdsException->getRequestId(),
+ PHP_EOL,
+ PHP_EOL
+ );
+ foreach ($googleAdsException->getGoogleAdsFailure()->getErrors() as $error) {
+ /** @var GoogleAdsError $error */
+ printf(
+ "\t%s: %s%s",
+ $error->getErrorCode()->getErrorCode(),
+ $error->getMessage(),
+ PHP_EOL
+ );
+ }
+ } catch (ApiException $apiException) {
+ printf(
+ "ApiException was thrown with message '%s'.%s",
+ $apiException->getMessage(),
+ PHP_EOL
+ );
+ }
+ }
+
+ /**
+ * Runs the example.
+ *
+ * @param GoogleAdsClient $googleAdsClient the Google Ads API client
+ * @param int $customerId the client customer ID without hyphens
+ * @param int $adGroupId the ad group ID
+ * @param int $cpcBidMicroAmount the CPC bid micro amount to set on created ad group criteria
+ */
+ public static function runExample(
+ GoogleAdsClient $googleAdsClient,
+ $customerId,
+ $adGroupId,
+ $cpcBidMicroAmount
+ ) {
+ $operations = [];
+
+ // Creates the root of the tree as a SUBDIVISION node.
+ $rootId = self::addRootNode($customerId, $adGroupId, $operations, $cpcBidMicroAmount);
+
+ // Creates child nodes of level 1, partitioned by the hotel class info.
+ $otherHotelClassesId =
+ self::addLevel1Nodes($customerId, $adGroupId, $rootId, $operations, $cpcBidMicroAmount);
+
+ // Creates child nodes of level 2, partitioned by the hotel country region info.
+ self::addLevel2Nodes(
+ $customerId,
+ $adGroupId,
+ $otherHotelClassesId,
+ $operations,
+ $cpcBidMicroAmount
+ );
+
+ $adGroupCriterionServiceClient = $googleAdsClient->getAdGroupCriterionServiceClient();
+ $response = $adGroupCriterionServiceClient->mutateAdGroupCriteria($customerId, $operations);
+
+ printf("Added %d listing group info entities.%s", count($response->getResults()), PHP_EOL);
+ foreach ($response->getResults() as $adGroupCriterion) {
+ print $adGroupCriterion->getResourceName() . PHP_EOL;
+ }
+ }
+
+ /**
+ * Creates the root node of the listing group tree and adds its create operation to the
+ * operations list.
+ *
+ * @param int $customerId the customer ID
+ * @param int $adGroupId the ad group ID
+ * @param AdGroupCriterionOperation[] $operations the operations
+ * @param int $cpcBidMicroAmount the CPC bid micro amount to set on created ad group criteria
+ * @return int the root node's temporary ID
+ */
+ private static function addRootNode(
+ $customerId,
+ $adGroupId,
+ array &$operations,
+ $cpcBidMicroAmount
+ ) {
+ // Creates the root of the tree as a SUBDIVISION node.
+ $root = self::createListingGroupInfo(ListingGroupTypeEnum_ListingGroupType::SUBDIVISION);
+ $rootAdGroupCriterion =
+ self::createAdGroupCriterion($customerId, $adGroupId, $root, $cpcBidMicroAmount);
+ $operation = self::generateCreateOperation($rootAdGroupCriterion);
+ $operations[] = $operation;
+
+ return self::$nextTempId--;
+ }
+
+ /**
+ * Creates child nodes of level 1, partitioned by the hotel class info.
+ *
+ * @param int $customerId the customer ID
+ * @param int $adGroupId the ad group ID
+ * @param int $rootId the root ID for all nodes at this level
+ * @param AdGroupCriterionOperation[] $operations the operations list
+ * @param int $cpcBidMicroAmount the CPC bid micro amount to set on created ad group criteria
+ * @return int the "other hotel classes" node's temporary ID, which serves as a parent node for
+ * the next level
+ */
+ // [START addLevel1Nodes]
+ private static function addLevel1Nodes(
+ $customerId,
+ $adGroupId,
+ $rootId,
+ array &$operations,
+ $cpcBidMicroAmount
+ ) {
+ // Creates hotel class info and dimension info for 5-star hotels.
+ $fiveStarredHotelClassInfo = new HotelClassInfo();
+ $wrappedValue = new Int64Value();
+ $wrappedValue->setValue(5);
+ $fiveStarredHotelClassInfo->setValue($wrappedValue);
+ $fiveStarredDimensionInfo = new ListingDimensionInfo();
+ $fiveStarredDimensionInfo->setHotelClass($fiveStarredHotelClassInfo);
+ // Creates listing group info for 5-star hotels as a UNIT node.
+ $fiveStarredUnit = self::createListingGroupInfo(
+ ListingGroupTypeEnum_ListingGroupType::UNIT,
+ $rootId,
+ $fiveStarredDimensionInfo
+ );
+ // Creates an ad group criterion for 5-star hotels.
+ $fiveStarredAdGroupCriterion = self::createAdGroupCriterion(
+ $customerId,
+ $adGroupId,
+ $fiveStarredUnit,
+ $cpcBidMicroAmount
+ );
+ // Decrements the temp ID for the next ad group criterion.
+ self::$nextTempId--;
+ $operation = self::generateCreateOperation($fiveStarredAdGroupCriterion);
+ $operations[] = $operation;
+
+ // You can also create more UNIT nodes for other hotel classes by copying the above code in
+ // this method and modifying the value passed to HotelClassInfo() to the value you want.
+ // For instance, passing 4 instead of 5 in the above code will create a UNIT node of 4-star
+ // hotels instead.
+
+ // Creates hotel class info and dimension info for other hotel classes by *not* specifying
+ // any attributes on those object.
+ $othersHotelsDimensionInfo = new ListingDimensionInfo();
+ $othersHotelsDimensionInfo->setHotelClass(new HotelClassInfo());
+ // Creates listing group info for other hotel classes as a SUBDIVISION node, which will be
+ // used as a parent node for children nodes of the next level.
+ $otherHotelsSubDivision = self::createListingGroupInfo(
+ ListingGroupTypeEnum_ListingGroupType::SUBDIVISION,
+ $rootId,
+ $othersHotelsDimensionInfo
+ );
+ // Creates an ad group criterion for other hotel classes.
+ $otherHotelsAdGroupCriterion = self::createAdGroupCriterion(
+ $customerId,
+ $adGroupId,
+ $otherHotelsSubDivision,
+ $cpcBidMicroAmount
+ );
+ $operation = self::generateCreateOperation($otherHotelsAdGroupCriterion);
+ $operations[] = $operation;
+
+ return self::$nextTempId--;
+ }
+ // [END addLevel1Nodes]
+
+ /**
+ * Creates child nodes of level 2, partitioned by the country region.
+ *
+ * @param int $customerId the customer ID
+ * @param int $adGroupId the ad group ID
+ * @param int $parentId the parent ID for all nodes at this level
+ * @param AdGroupCriterionOperation[] $operations the operations list
+ * @param int $cpcBidMicroAmount the CPC bid micro amount to set on created ad group criteria
+ */
+ private static function addLevel2Nodes(
+ $customerId,
+ $adGroupId,
+ $parentId,
+ array &$operations,
+ $cpcBidMicroAmount
+ ) {
+ // Creates hotel country region info and dimension info for hotels in Japan.
+ $japanCountryRegionInfo = new HotelCountryRegionInfo();
+ // The criterion ID for Japan is 2392.
+ // See https://developers.google.com/adwords/api/docs/appendix/geotargeting for criteria ID
+ // of other countries.
+ $japanGeoTargetConstantId = 2392;
+ $japanCountryCriterionResourceName =
+ ResourceNames::forGeoTargetConstant($japanGeoTargetConstantId);
+ $wrappedResourceName = new StringValue();
+ $wrappedResourceName->setValue($japanCountryCriterionResourceName);
+ $japanCountryRegionInfo->setCountryRegionCriterion($wrappedResourceName);
+ $japanDimensionInfo = new ListingDimensionInfo();
+ $japanDimensionInfo->setHotelCountryRegion($japanCountryRegionInfo);
+ // Creates listing group info for hotels in Japan as a UNIT node.
+ $japanHotelsUnit = self::createListingGroupInfo(
+ ListingGroupTypeEnum_ListingGroupType::UNIT,
+ $parentId,
+ $japanDimensionInfo
+ );
+ // Creates an ad group criterion for hotels in Japan.
+ $japanHotelsAdGroupCriterion = self::createAdGroupCriterion(
+ $customerId,
+ $adGroupId,
+ $japanHotelsUnit,
+ $cpcBidMicroAmount
+ );
+ // Decrements the temp ID for the next ad group criterion.
+ self::$nextTempId--;
+ $operation = self::generateCreateOperation($japanHotelsAdGroupCriterion);
+ $operations[] = $operation;
+
+ // Creates hotel class info and dimension info for hotels in other regions.
+ $otherHotelRegionsDimensionInfo = new ListingDimensionInfo();
+ $otherHotelRegionsDimensionInfo->setHotelCountryRegion(new HotelCountryRegionInfo());
+ // Creates listing group info for hotels in other regions as a UNIT node.
+ // The "others" node is always required for every level of the tree.
+ $otherHotelRegionsUnit = self::createListingGroupInfo(
+ ListingGroupTypeEnum_ListingGroupType::UNIT,
+ $parentId,
+ $otherHotelRegionsDimensionInfo
+ );
+ // Creates an ad group criterion for other hotel country regions.
+ $otherHotelRegionsAdGroupCriterion = self::createAdGroupCriterion(
+ $customerId,
+ $adGroupId,
+ $otherHotelRegionsUnit,
+ $cpcBidMicroAmount
+ );
+ $operation = self::generateCreateOperation($otherHotelRegionsAdGroupCriterion);
+ $operations[] = $operation;
+ }
+
+ /**
+ * Creates the listing group info with the provided parameters.
+ *
+ * @param int $listingGroupType the listing group type
+ * @param int|null $parentCriterionId optional, the parent criterion ID of the listing group
+ * info
+ * @param ListingDimensionInfo|null $caseValue optional, the dimension info for the listing
+ * group
+ * @return ListingGroupInfo the created listing group info
+ */
+ private static function createListingGroupInfo(
+ $listingGroupType,
+ $parentCriterionId = null,
+ ListingDimensionInfo $caseValue = null
+ ) {
+ $listingGroupInfo = new ListingGroupInfo();
+ $listingGroupInfo->setType($listingGroupType);
+ if (!is_null($parentCriterionId)) {
+ $wrappedParentCriterionId = new Int64Value();
+ $wrappedParentCriterionId->setValue($parentCriterionId);
+ $listingGroupInfo->setParentCriterionId($wrappedParentCriterionId);
+ $listingGroupInfo->setCaseValue($caseValue);
+ }
+
+ return $listingGroupInfo;
+ }
+
+ /**
+ * Creates an ad group criterion from the provided listing group info.
+ * Bid amount will be set on the created ad group criterion when listing group info type is
+ * `UNIT`. Setting bid amount for `SUBDIVISION` types is not allowed.
+ *
+ * @param int $customerId the customer ID
+ * @param int $adGroupId the ad group ID
+ * @param ListingGroupInfo $listingGroupInfo the listing group info
+ * @param int $cpcBidMicroAmount the CPC bid micro amount to set for the ad group criterion
+ * @return AdGroupCriterion the created ad group criterion
+ */
+ private static function createAdGroupCriterion(
+ $customerId,
+ $adGroupId,
+ ListingGroupInfo $listingGroupInfo,
+ $cpcBidMicroAmount
+ ) {
+ $adGroupCriterion = new AdGroupCriterion();
+ $adGroupCriterion->setStatus(AdGroupStatusEnum_AdGroupStatus::ENABLED);
+ $adGroupCriterion->setListingGroup($listingGroupInfo);
+
+ $adGroupCriterion->setResourceName(
+ ResourceNames::forAdGroupCriterion($customerId, $adGroupId, self::$nextTempId)
+ );
+
+ // Bids are valid only for UNIT nodes.
+ if ($listingGroupInfo->getType() == ListingGroupTypeEnum_ListingGroupType::UNIT) {
+ $wrappedValue = new Int64Value();
+ $wrappedValue->setValue($cpcBidMicroAmount);
+ $adGroupCriterion->setCpcBidMicros($wrappedValue);
+ }
+
+ return $adGroupCriterion;
+ }
+
+ /**
+ * Creates an operation for creating the specified ad group criterion.
+ *
+ * @param AdGroupCriterion $adGroupCriterion the ad group criterion to create an operation for
+ * @return AdGroupCriterionOperation the created ad group criterion operation
+ */
+ private static function generateCreateOperation(AdGroupCriterion $adGroupCriterion)
+ {
+ $operation = new AdGroupCriterionOperation();
+ $operation->setCreate($adGroupCriterion);
+
+ return $operation;
+ }
+}
+
+AddHotelListingGroupTree::main();
diff --git a/examples/Recommendations/ApplyRecommendation.php b/examples/Recommendations/ApplyRecommendation.php
new file mode 100644
index 000000000..608be4e82
--- /dev/null
+++ b/examples/Recommendations/ApplyRecommendation.php
@@ -0,0 +1,145 @@
+/recommendations/int64 num = 1;
+ */
+ private $num = 0;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\Util\Testing\Tester::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * Generated from protobuf field int64 num = 1;
+ * @return int|string
+ */
+ public function getNum()
+ {
+ return $this->num;
+ }
+
+ /**
+ * Generated from protobuf field int64 num = 1;
+ * @param int|string $var
+ * @return $this
+ */
+ public function setNum($var)
+ {
+ GPBUtil::checkInt64($var);
+ $this->num = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/Util/Testing/Google/Ads/GoogleAds/Util/Testing/Foo.php b/src/Google/Ads/GoogleAds/Util/Testing/Google/Ads/GoogleAds/Util/Testing/Foo.php
new file mode 100644
index 000000000..bf5e7c6b2
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/Util/Testing/Google/Ads/GoogleAds/Util/Testing/Foo.php
@@ -0,0 +1,101 @@
+google.ads.googleads.util.testing.Foo
+ */
+class Foo extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * Generated from protobuf field int64 num = 1;
+ */
+ private $num = 0;
+ /**
+ * Generated from protobuf field .google.ads.googleads.util.testing.Bar bar = 2;
+ */
+ private $bar = null;
+ /**
+ * Generated from protobuf field repeated .google.ads.googleads.util.testing.Bar bars = 3;
+ */
+ private $bars;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\Util\Testing\Tester::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * Generated from protobuf field int64 num = 1;
+ * @return int|string
+ */
+ public function getNum()
+ {
+ return $this->num;
+ }
+
+ /**
+ * Generated from protobuf field int64 num = 1;
+ * @param int|string $var
+ * @return $this
+ */
+ public function setNum($var)
+ {
+ GPBUtil::checkInt64($var);
+ $this->num = $var;
+
+ return $this;
+ }
+
+ /**
+ * Generated from protobuf field .google.ads.googleads.util.testing.Bar bar = 2;
+ * @return \Google\Ads\GoogleAds\Util\Testing\Bar
+ */
+ public function getBar()
+ {
+ return $this->bar;
+ }
+
+ /**
+ * Generated from protobuf field .google.ads.googleads.util.testing.Bar bar = 2;
+ * @param \Google\Ads\GoogleAds\Util\Testing\Bar $var
+ * @return $this
+ */
+ public function setBar($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\Util\Testing\Bar::class);
+ $this->bar = $var;
+
+ return $this;
+ }
+
+ /**
+ * Generated from protobuf field repeated .google.ads.googleads.util.testing.Bar bars = 3;
+ * @return \Google\Protobuf\Internal\RepeatedField
+ */
+ public function getBars()
+ {
+ return $this->bars;
+ }
+
+ /**
+ * Generated from protobuf field repeated .google.ads.googleads.util.testing.Bar bars = 3;
+ * @param \Google\Ads\GoogleAds\Util\Testing\Bar[]|\Google\Protobuf\Internal\RepeatedField $var
+ * @return $this
+ */
+ public function setBars($var)
+ {
+ $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Ads\GoogleAds\Util\Testing\Bar::class);
+ $this->bars = $arr;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/Util/Testing/Google/Ads/GoogleAds/Util/Testing/Resource.php b/src/Google/Ads/GoogleAds/Util/Testing/Google/Ads/GoogleAds/Util/Testing/Resource.php
new file mode 100644
index 000000000..f8063975f
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/Util/Testing/Google/Ads/GoogleAds/Util/Testing/Resource.php
@@ -0,0 +1,101 @@
+google.ads.googleads.util.testing.Resource
+ */
+class Resource extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * Generated from protobuf field .google.protobuf.StringValue wrapper = 1;
+ */
+ private $wrapper = null;
+ /**
+ * Generated from protobuf field .google.ads.googleads.util.testing.Foo foo = 2;
+ */
+ private $foo = null;
+ /**
+ * Generated from protobuf field repeated .google.ads.googleads.util.testing.Foo foos = 3;
+ */
+ private $foos;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\Util\Testing\Tester::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * Generated from protobuf field .google.protobuf.StringValue wrapper = 1;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getWrapper()
+ {
+ return $this->wrapper;
+ }
+
+ /**
+ * Generated from protobuf field .google.protobuf.StringValue wrapper = 1;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setWrapper($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->wrapper = $var;
+
+ return $this;
+ }
+
+ /**
+ * Generated from protobuf field .google.ads.googleads.util.testing.Foo foo = 2;
+ * @return \Google\Ads\GoogleAds\Util\Testing\Foo
+ */
+ public function getFoo()
+ {
+ return $this->foo;
+ }
+
+ /**
+ * Generated from protobuf field .google.ads.googleads.util.testing.Foo foo = 2;
+ * @param \Google\Ads\GoogleAds\Util\Testing\Foo $var
+ * @return $this
+ */
+ public function setFoo($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\Util\Testing\Foo::class);
+ $this->foo = $var;
+
+ return $this;
+ }
+
+ /**
+ * Generated from protobuf field repeated .google.ads.googleads.util.testing.Foo foos = 3;
+ * @return \Google\Protobuf\Internal\RepeatedField
+ */
+ public function getFoos()
+ {
+ return $this->foos;
+ }
+
+ /**
+ * Generated from protobuf field repeated .google.ads.googleads.util.testing.Foo foos = 3;
+ * @param \Google\Ads\GoogleAds\Util\Testing\Foo[]|\Google\Protobuf\Internal\RepeatedField $var
+ * @return $this
+ */
+ public function setFoos($var)
+ {
+ $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Ads\GoogleAds\Util\Testing\Foo::class);
+ $this->foos = $arr;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/Util/Testing/Google/Ads/GoogleAds/Util/Testing/TestCase.php b/src/Google/Ads/GoogleAds/Util/Testing/Google/Ads/GoogleAds/Util/Testing/TestCase.php
new file mode 100644
index 000000000..a595b0f5f
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/Util/Testing/Google/Ads/GoogleAds/Util/Testing/TestCase.php
@@ -0,0 +1,127 @@
+google.ads.googleads.util.testing.TestCase
+ */
+class TestCase extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * Generated from protobuf field string description = 1;
+ */
+ private $description = '';
+ /**
+ * Generated from protobuf field .google.ads.googleads.util.testing.Resource original_resource = 2;
+ */
+ private $original_resource = null;
+ /**
+ * Generated from protobuf field .google.ads.googleads.util.testing.Resource modified_resource = 3;
+ */
+ private $modified_resource = null;
+ /**
+ * Generated from protobuf field .google.protobuf.FieldMask expected_mask = 4;
+ */
+ private $expected_mask = null;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\Util\Testing\Tester::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * Generated from protobuf field string description = 1;
+ * @return string
+ */
+ public function getDescription()
+ {
+ return $this->description;
+ }
+
+ /**
+ * Generated from protobuf field string description = 1;
+ * @param string $var
+ * @return $this
+ */
+ public function setDescription($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->description = $var;
+
+ return $this;
+ }
+
+ /**
+ * Generated from protobuf field .google.ads.googleads.util.testing.Resource original_resource = 2;
+ * @return \Google\Ads\GoogleAds\Util\Testing\Resource
+ */
+ public function getOriginalResource()
+ {
+ return $this->original_resource;
+ }
+
+ /**
+ * Generated from protobuf field .google.ads.googleads.util.testing.Resource original_resource = 2;
+ * @param \Google\Ads\GoogleAds\Util\Testing\Resource $var
+ * @return $this
+ */
+ public function setOriginalResource($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\Util\Testing\Resource::class);
+ $this->original_resource = $var;
+
+ return $this;
+ }
+
+ /**
+ * Generated from protobuf field .google.ads.googleads.util.testing.Resource modified_resource = 3;
+ * @return \Google\Ads\GoogleAds\Util\Testing\Resource
+ */
+ public function getModifiedResource()
+ {
+ return $this->modified_resource;
+ }
+
+ /**
+ * Generated from protobuf field .google.ads.googleads.util.testing.Resource modified_resource = 3;
+ * @param \Google\Ads\GoogleAds\Util\Testing\Resource $var
+ * @return $this
+ */
+ public function setModifiedResource($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\Util\Testing\Resource::class);
+ $this->modified_resource = $var;
+
+ return $this;
+ }
+
+ /**
+ * Generated from protobuf field .google.protobuf.FieldMask expected_mask = 4;
+ * @return \Google\Protobuf\FieldMask
+ */
+ public function getExpectedMask()
+ {
+ return $this->expected_mask;
+ }
+
+ /**
+ * Generated from protobuf field .google.protobuf.FieldMask expected_mask = 4;
+ * @param \Google\Protobuf\FieldMask $var
+ * @return $this
+ */
+ public function setExpectedMask($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\FieldMask::class);
+ $this->expected_mask = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/Util/Testing/Google/Ads/GoogleAds/Util/Testing/TestSuite.php b/src/Google/Ads/GoogleAds/Util/Testing/Google/Ads/GoogleAds/Util/Testing/TestSuite.php
new file mode 100644
index 000000000..ccb73f241
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/Util/Testing/Google/Ads/GoogleAds/Util/Testing/TestSuite.php
@@ -0,0 +1,49 @@
+google.ads.googleads.util.testing.TestSuite
+ */
+class TestSuite extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * Generated from protobuf field repeated .google.ads.googleads.util.testing.TestCase test_cases = 1;
+ */
+ private $test_cases;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\Util\Testing\Tester::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * Generated from protobuf field repeated .google.ads.googleads.util.testing.TestCase test_cases = 1;
+ * @return \Google\Protobuf\Internal\RepeatedField
+ */
+ public function getTestCases()
+ {
+ return $this->test_cases;
+ }
+
+ /**
+ * Generated from protobuf field repeated .google.ads.googleads.util.testing.TestCase test_cases = 1;
+ * @param \Google\Ads\GoogleAds\Util\Testing\TestCase[]|\Google\Protobuf\Internal\RepeatedField $var
+ * @return $this
+ */
+ public function setTestCases($var)
+ {
+ $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Ads\GoogleAds\Util\Testing\TestCase::class);
+ $this->test_cases = $arr;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/Util/Testing/metadata/Google/Ads/GoogleAds/Util/Testing/Tester.php b/src/Google/Ads/GoogleAds/Util/Testing/metadata/Google/Ads/GoogleAds/Util/Testing/Tester.php
new file mode 100644
index 000000000..a4aeae631
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/Util/Testing/metadata/Google/Ads/GoogleAds/Util/Testing/Tester.php
@@ -0,0 +1,54 @@
+internalAddGeneratedFile(hex2bin(
+ "0ac9060a2e476f6f676c652f4164732f476f6f676c654164732f5574696c" .
+ "2f54657374696e672f7465737465722e70726f746f1221676f6f676c652e" .
+ "6164732e676f6f676c656164732e7574696c2e74657374696e671a20676f" .
+ "6f676c652f70726f746f6275662f6669656c645f6d61736b2e70726f746f" .
+ "224c0a09546573745375697465123f0a0a746573745f6361736573180120" .
+ "03280b322b2e676f6f676c652e6164732e676f6f676c656164732e757469" .
+ "6c2e74657374696e672e546573744361736522e2010a0854657374436173" .
+ "6512130a0b6465736372697074696f6e18012001280912460a116f726967" .
+ "696e616c5f7265736f7572636518022001280b322b2e676f6f676c652e61" .
+ "64732e676f6f676c656164732e7574696c2e74657374696e672e5265736f" .
+ "7572636512460a116d6f6469666965645f7265736f757263651803200128" .
+ "0b322b2e676f6f676c652e6164732e676f6f676c656164732e7574696c2e" .
+ "74657374696e672e5265736f7572636512310a0d65787065637465645f6d" .
+ "61736b18042001280b321a2e676f6f676c652e70726f746f6275662e4669" .
+ "656c644d61736b22a4010a085265736f75726365122d0a07777261707065" .
+ "7218012001280b321c2e676f6f676c652e70726f746f6275662e53747269" .
+ "6e6756616c756512330a03666f6f18022001280b32262e676f6f676c652e" .
+ "6164732e676f6f676c656164732e7574696c2e74657374696e672e466f6f" .
+ "12340a04666f6f7318032003280b32262e676f6f676c652e6164732e676f" .
+ "6f676c656164732e7574696c2e74657374696e672e466f6f227d0a03466f" .
+ "6f120b0a036e756d18012001280312330a0362617218022001280b32262e" .
+ "676f6f676c652e6164732e676f6f676c656164732e7574696c2e74657374" .
+ "696e672e42617212340a046261727318032003280b32262e676f6f676c65" .
+ "2e6164732e676f6f676c656164732e7574696c2e74657374696e672e4261" .
+ "7222120a03426172120b0a036e756d180120012803425d0a25636f6d2e67" .
+ "6f6f676c652e6164732e676f6f676c656164732e7574696c2e7465737469" .
+ "6e67420e54657374537569746550726f746f5001ca0221476f6f676c655c" .
+ "4164735c476f6f676c654164735c5574696c5c54657374696e6762067072" .
+ "6f746f33"
+ ));
+
+ static::$is_initialized = true;
+ }
+}
+
diff --git a/src/Google/Ads/GoogleAds/Util/Testing/proto/Google/Ads/GoogleAds/Util/Testing/tester.proto b/src/Google/Ads/GoogleAds/Util/Testing/proto/Google/Ads/GoogleAds/Util/Testing/tester.proto
new file mode 100644
index 000000000..cb5678966
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/Util/Testing/proto/Google/Ads/GoogleAds/Util/Testing/tester.proto
@@ -0,0 +1,38 @@
+syntax = "proto3";
+
+package google.ads.googleads.util.testing;
+
+import "google/protobuf/wrappers.proto";
+import "google/protobuf/field_mask.proto";
+
+option java_multiple_files = true;
+option java_outer_classname = "TestSuiteProto";
+option java_package = "com.google.ads.googleads.util.testing";
+option php_namespace = "Google\\Ads\\GoogleAds\\Util\\Testing";
+
+message TestSuite {
+ repeated TestCase test_cases = 1;
+}
+
+message TestCase {
+ string description = 1;
+ Resource original_resource = 2;
+ Resource modified_resource = 3;
+ google.protobuf.FieldMask expected_mask = 4;
+}
+
+message Resource {
+ google.protobuf.StringValue wrapper = 1;
+ Foo foo = 2;
+ repeated Foo foos = 3;
+}
+
+message Foo {
+ int64 num = 1;
+ Bar bar = 2;
+ repeated Bar bars = 3;
+}
+
+message Bar {
+ int64 num = 1;
+}
diff --git a/src/Google/Ads/GoogleAds/Util/Testing/proto/README.md b/src/Google/Ads/GoogleAds/Util/Testing/proto/README.md
new file mode 100644
index 000000000..b2c6e6ef7
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/Util/Testing/proto/README.md
@@ -0,0 +1,11 @@
+## Conformance Test Protobuf Definition
+
+This directory contains the `tester.proto` file, which defines the message
+types used for running conformance tests for the FieldMasks class. It also
+contains `generate.sh`, which is used to execute the protobuf compiler
+(`protoc`) to generate PHP classes for the messages defined in `tester.proto`
+To run this script, you need to install `protoc` via
+[these instructions](https://github.com/google/protobuf#protocol-compiler-installation).
+
+The `generate.sh` script should be invoked whenever a change is made to the
+`tester.proto` file, and the generated PHP classes need to be updated.
diff --git a/src/Google/Ads/GoogleAds/Util/Testing/proto/generate.sh b/src/Google/Ads/GoogleAds/Util/Testing/proto/generate.sh
new file mode 100755
index 000000000..5ea0f5950
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/Util/Testing/proto/generate.sh
@@ -0,0 +1,8 @@
+#!/bin/bash
+
+# Run this script whenever changes are made to tester.proto to regenerate the
+# PHP protobuf message classes.
+
+protoc --php_out ../ Google/Ads/GoogleAds/Util/Testing/tester.proto
+cp -r ../GPBMetadata/* ../metadata/
+rm -r ../GPBMetadata
diff --git a/src/Google/Ads/GoogleAds/Util/Testing/testdata/test_cases.json b/src/Google/Ads/GoogleAds/Util/Testing/testdata/test_cases.json
new file mode 100644
index 000000000..69afd9d97
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/Util/Testing/testdata/test_cases.json
@@ -0,0 +1,100 @@
+{
+ "test_cases": [{
+ "description": "Modify scalar in a wrapper proto",
+ "original_resource": {
+ "wrapper": "a"
+ },
+ "modified_resource": {
+ "wrapper": "b"
+ },
+ "expected_mask": "wrapper"
+ }, {
+ "description": "Create wrapper proto",
+ "original_resource": {
+ },
+ "modified_resource": {
+ "wrapper": "a"
+ },
+ "expected_mask": "wrapper"
+ }, {
+ "description": "Modify element in a repeated field",
+ "original_resource": {
+ "foos": [{
+ "num": 1
+ }, {
+ "num": 2
+ }]
+ },
+ "modified_resource": {
+ "foos": [{
+ "num": 1
+ }, {
+ "num": 3
+ }]
+ },
+ "expected_mask": "foos"
+ }, {
+ "description": "Modify element in a nested repeated field",
+ "original_resource": {
+ "foos": [{
+ "bars": [{
+ "num": 1
+ }]
+ }]
+ },
+ "modified_resource": {
+ "foos": [{
+ "bars": [{
+ "num": 2
+ }]
+ }]
+ },
+ "expected_mask": "foos"
+ }, {
+ "description": "Create submessage",
+ "original_resource": {
+ },
+ "modified_resource": {
+ "foo": {
+ "num": 1
+ }
+ },
+ "expected_mask": "foo.num,foo.bar,foo.bars"
+ }, {
+ "description": "Modify submessage",
+ "original_resource": {
+ "foo": {
+ }
+ },
+ "modified_resource": {
+ "foo": {
+ "num": 1
+ }
+ },
+ "expected_mask": "foo.num"
+ }, {
+ "description": "Clear submessage",
+ "original_resource": {
+ "foo": {
+ }
+ },
+ "modified_resource": {
+ },
+ "expected_mask": "foo"
+ }, {
+ "description": "No change",
+ "original_resource": {
+ "wrapper": "a",
+ "foos": [{
+ "num": 1
+ }]
+ },
+ "modified_resource": {
+ "wrapper": "a",
+ "foos": [{
+ "num": 1
+ }]
+ },
+ "expected_mask": {}
+ }
+]}
diff --git a/src/Google/Ads/GoogleAds/V0/Common/Ad.php b/src/Google/Ads/GoogleAds/V0/Common/Ad.php
new file mode 100644
index 000000000..6e633a8d1
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Common/Ad.php
@@ -0,0 +1,460 @@
+google.ads.googleads.v0.common.Ad
+ */
+class Ad extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The ID of the ad.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value id = 1;
+ */
+ private $id = null;
+ /**
+ * The list of possible final URLs after all cross-domain redirects for the
+ * ad.
+ *
+ * Generated from protobuf field repeated .google.protobuf.StringValue final_urls = 2;
+ */
+ private $final_urls;
+ /**
+ * The list of possible final mobile URLs after all cross-domain redirects
+ * for the ad.
+ *
+ * Generated from protobuf field repeated .google.protobuf.StringValue final_mobile_urls = 16;
+ */
+ private $final_mobile_urls;
+ /**
+ * The URL template for constructing a tracking URL.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue tracking_url_template = 12;
+ */
+ private $tracking_url_template = null;
+ /**
+ * The list of mappings that can be used to substitute custom parameter tags
+ * in a
+ * `tracking_url_template`, `final_urls`, or `mobile_final_urls`.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.common.CustomParameter url_custom_parameters = 10;
+ */
+ private $url_custom_parameters;
+ /**
+ * The URL that appears in the ad description for some ad formats.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue display_url = 4;
+ */
+ private $display_url = null;
+ /**
+ * The type of ad.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.AdTypeEnum.AdType type = 5;
+ */
+ private $type = 0;
+ protected $ad_data;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Common\Ad::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * The ID of the ad.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value id = 1;
+ * @return \Google\Protobuf\Int64Value
+ */
+ public function getId()
+ {
+ return $this->id;
+ }
+
+ /**
+ * The ID of the ad.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value id = 1;
+ * @param \Google\Protobuf\Int64Value $var
+ * @return $this
+ */
+ public function setId($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Int64Value::class);
+ $this->id = $var;
+
+ return $this;
+ }
+
+ /**
+ * The list of possible final URLs after all cross-domain redirects for the
+ * ad.
+ *
+ * Generated from protobuf field repeated .google.protobuf.StringValue final_urls = 2;
+ * @return \Google\Protobuf\Internal\RepeatedField
+ */
+ public function getFinalUrls()
+ {
+ return $this->final_urls;
+ }
+
+ /**
+ * The list of possible final URLs after all cross-domain redirects for the
+ * ad.
+ *
+ * Generated from protobuf field repeated .google.protobuf.StringValue final_urls = 2;
+ * @param \Google\Protobuf\StringValue[]|\Google\Protobuf\Internal\RepeatedField $var
+ * @return $this
+ */
+ public function setFinalUrls($var)
+ {
+ $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\StringValue::class);
+ $this->final_urls = $arr;
+
+ return $this;
+ }
+
+ /**
+ * The list of possible final mobile URLs after all cross-domain redirects
+ * for the ad.
+ *
+ * Generated from protobuf field repeated .google.protobuf.StringValue final_mobile_urls = 16;
+ * @return \Google\Protobuf\Internal\RepeatedField
+ */
+ public function getFinalMobileUrls()
+ {
+ return $this->final_mobile_urls;
+ }
+
+ /**
+ * The list of possible final mobile URLs after all cross-domain redirects
+ * for the ad.
+ *
+ * Generated from protobuf field repeated .google.protobuf.StringValue final_mobile_urls = 16;
+ * @param \Google\Protobuf\StringValue[]|\Google\Protobuf\Internal\RepeatedField $var
+ * @return $this
+ */
+ public function setFinalMobileUrls($var)
+ {
+ $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\StringValue::class);
+ $this->final_mobile_urls = $arr;
+
+ return $this;
+ }
+
+ /**
+ * The URL template for constructing a tracking URL.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue tracking_url_template = 12;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getTrackingUrlTemplate()
+ {
+ return $this->tracking_url_template;
+ }
+
+ /**
+ * The URL template for constructing a tracking URL.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue tracking_url_template = 12;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setTrackingUrlTemplate($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->tracking_url_template = $var;
+
+ return $this;
+ }
+
+ /**
+ * The list of mappings that can be used to substitute custom parameter tags
+ * in a
+ * `tracking_url_template`, `final_urls`, or `mobile_final_urls`.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.common.CustomParameter url_custom_parameters = 10;
+ * @return \Google\Protobuf\Internal\RepeatedField
+ */
+ public function getUrlCustomParameters()
+ {
+ return $this->url_custom_parameters;
+ }
+
+ /**
+ * The list of mappings that can be used to substitute custom parameter tags
+ * in a
+ * `tracking_url_template`, `final_urls`, or `mobile_final_urls`.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.common.CustomParameter url_custom_parameters = 10;
+ * @param \Google\Ads\GoogleAds\V0\Common\CustomParameter[]|\Google\Protobuf\Internal\RepeatedField $var
+ * @return $this
+ */
+ public function setUrlCustomParameters($var)
+ {
+ $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Ads\GoogleAds\V0\Common\CustomParameter::class);
+ $this->url_custom_parameters = $arr;
+
+ return $this;
+ }
+
+ /**
+ * The URL that appears in the ad description for some ad formats.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue display_url = 4;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getDisplayUrl()
+ {
+ return $this->display_url;
+ }
+
+ /**
+ * The URL that appears in the ad description for some ad formats.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue display_url = 4;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setDisplayUrl($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->display_url = $var;
+
+ return $this;
+ }
+
+ /**
+ * The type of ad.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.AdTypeEnum.AdType type = 5;
+ * @return int
+ */
+ public function getType()
+ {
+ return $this->type;
+ }
+
+ /**
+ * The type of ad.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.AdTypeEnum.AdType type = 5;
+ * @param int $var
+ * @return $this
+ */
+ public function setType($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Enums\AdTypeEnum_AdType::class);
+ $this->type = $var;
+
+ return $this;
+ }
+
+ /**
+ * Details pertaining to a text ad.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.TextAdInfo text_ad = 6;
+ * @return \Google\Ads\GoogleAds\V0\Common\TextAdInfo
+ */
+ public function getTextAd()
+ {
+ return $this->readOneof(6);
+ }
+
+ /**
+ * Details pertaining to a text ad.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.TextAdInfo text_ad = 6;
+ * @param \Google\Ads\GoogleAds\V0\Common\TextAdInfo $var
+ * @return $this
+ */
+ public function setTextAd($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Common\TextAdInfo::class);
+ $this->writeOneof(6, $var);
+
+ return $this;
+ }
+
+ /**
+ * Details pertaining to an expanded text ad.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.ExpandedTextAdInfo expanded_text_ad = 7;
+ * @return \Google\Ads\GoogleAds\V0\Common\ExpandedTextAdInfo
+ */
+ public function getExpandedTextAd()
+ {
+ return $this->readOneof(7);
+ }
+
+ /**
+ * Details pertaining to an expanded text ad.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.ExpandedTextAdInfo expanded_text_ad = 7;
+ * @param \Google\Ads\GoogleAds\V0\Common\ExpandedTextAdInfo $var
+ * @return $this
+ */
+ public function setExpandedTextAd($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Common\ExpandedTextAdInfo::class);
+ $this->writeOneof(7, $var);
+
+ return $this;
+ }
+
+ /**
+ * Details pertaining to a Dynamic Search Ad.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.DynamicSearchAdInfo dynamic_search_ad = 8;
+ * @return \Google\Ads\GoogleAds\V0\Common\DynamicSearchAdInfo
+ */
+ public function getDynamicSearchAd()
+ {
+ return $this->readOneof(8);
+ }
+
+ /**
+ * Details pertaining to a Dynamic Search Ad.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.DynamicSearchAdInfo dynamic_search_ad = 8;
+ * @param \Google\Ads\GoogleAds\V0\Common\DynamicSearchAdInfo $var
+ * @return $this
+ */
+ public function setDynamicSearchAd($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Common\DynamicSearchAdInfo::class);
+ $this->writeOneof(8, $var);
+
+ return $this;
+ }
+
+ /**
+ * Details pertaining to a responsive display ad.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.ResponsiveDisplayAdInfo responsive_display_ad = 9;
+ * @return \Google\Ads\GoogleAds\V0\Common\ResponsiveDisplayAdInfo
+ */
+ public function getResponsiveDisplayAd()
+ {
+ return $this->readOneof(9);
+ }
+
+ /**
+ * Details pertaining to a responsive display ad.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.ResponsiveDisplayAdInfo responsive_display_ad = 9;
+ * @param \Google\Ads\GoogleAds\V0\Common\ResponsiveDisplayAdInfo $var
+ * @return $this
+ */
+ public function setResponsiveDisplayAd($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Common\ResponsiveDisplayAdInfo::class);
+ $this->writeOneof(9, $var);
+
+ return $this;
+ }
+
+ /**
+ * Details pertaining to a call-only ad.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.CallOnlyAdInfo call_only_ad = 13;
+ * @return \Google\Ads\GoogleAds\V0\Common\CallOnlyAdInfo
+ */
+ public function getCallOnlyAd()
+ {
+ return $this->readOneof(13);
+ }
+
+ /**
+ * Details pertaining to a call-only ad.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.CallOnlyAdInfo call_only_ad = 13;
+ * @param \Google\Ads\GoogleAds\V0\Common\CallOnlyAdInfo $var
+ * @return $this
+ */
+ public function setCallOnlyAd($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Common\CallOnlyAdInfo::class);
+ $this->writeOneof(13, $var);
+
+ return $this;
+ }
+
+ /**
+ * Details pertaining to an Expanded Dynamic Search Ad.
+ * This type of ad has its headline, final URLs, and display URL
+ * auto-generated at serving time according to domain name specific
+ * information provided by `dynamic_search_ads_setting` linked at the
+ * campaign level.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.ExpandedDynamicSearchAdInfo expanded_dynamic_search_ad = 14;
+ * @return \Google\Ads\GoogleAds\V0\Common\ExpandedDynamicSearchAdInfo
+ */
+ public function getExpandedDynamicSearchAd()
+ {
+ return $this->readOneof(14);
+ }
+
+ /**
+ * Details pertaining to an Expanded Dynamic Search Ad.
+ * This type of ad has its headline, final URLs, and display URL
+ * auto-generated at serving time according to domain name specific
+ * information provided by `dynamic_search_ads_setting` linked at the
+ * campaign level.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.ExpandedDynamicSearchAdInfo expanded_dynamic_search_ad = 14;
+ * @param \Google\Ads\GoogleAds\V0\Common\ExpandedDynamicSearchAdInfo $var
+ * @return $this
+ */
+ public function setExpandedDynamicSearchAd($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Common\ExpandedDynamicSearchAdInfo::class);
+ $this->writeOneof(14, $var);
+
+ return $this;
+ }
+
+ /**
+ * Details pertaining to a hotel ad.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.HotelAdInfo hotel_ad = 15;
+ * @return \Google\Ads\GoogleAds\V0\Common\HotelAdInfo
+ */
+ public function getHotelAd()
+ {
+ return $this->readOneof(15);
+ }
+
+ /**
+ * Details pertaining to a hotel ad.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.HotelAdInfo hotel_ad = 15;
+ * @param \Google\Ads\GoogleAds\V0\Common\HotelAdInfo $var
+ * @return $this
+ */
+ public function setHotelAd($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Common\HotelAdInfo::class);
+ $this->writeOneof(15, $var);
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getAdData()
+ {
+ return $this->whichOneof("ad_data");
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Common/CallOnlyAdInfo.php b/src/Google/Ads/GoogleAds/V0/Common/CallOnlyAdInfo.php
new file mode 100644
index 000000000..d50e419e1
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Common/CallOnlyAdInfo.php
@@ -0,0 +1,293 @@
+google.ads.googleads.v0.common.CallOnlyAdInfo
+ */
+class CallOnlyAdInfo extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The country code in the ad.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue country_code = 1;
+ */
+ private $country_code = null;
+ /**
+ * The phone number in the ad.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue phone_number = 2;
+ */
+ private $phone_number = null;
+ /**
+ * The business name in the ad.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue business_name = 3;
+ */
+ private $business_name = null;
+ /**
+ * The first line of the ad's description.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue description1 = 4;
+ */
+ private $description1 = null;
+ /**
+ * The second line of the ad's description.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue description2 = 5;
+ */
+ private $description2 = null;
+ /**
+ * Whether to enable call tracking for the creative. Enabling call
+ * tracking also enables call conversions.
+ *
+ * Generated from protobuf field .google.protobuf.BoolValue call_tracked = 6;
+ */
+ private $call_tracked = null;
+ /**
+ * Whether to disable call conversion for the creative.
+ * If set to `true`, disables call conversions even when `call_tracked` is
+ * `true`.
+ * If `call_tracked` is `false`, this field is ignored.
+ *
+ * Generated from protobuf field .google.protobuf.BoolValue disable_call_conversion = 7;
+ */
+ private $disable_call_conversion = null;
+ /**
+ * The URL to be used for phone number verification.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue phone_number_verification_url = 8;
+ */
+ private $phone_number_verification_url = null;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Common\Ad::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * The country code in the ad.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue country_code = 1;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getCountryCode()
+ {
+ return $this->country_code;
+ }
+
+ /**
+ * The country code in the ad.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue country_code = 1;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setCountryCode($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->country_code = $var;
+
+ return $this;
+ }
+
+ /**
+ * The phone number in the ad.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue phone_number = 2;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getPhoneNumber()
+ {
+ return $this->phone_number;
+ }
+
+ /**
+ * The phone number in the ad.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue phone_number = 2;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setPhoneNumber($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->phone_number = $var;
+
+ return $this;
+ }
+
+ /**
+ * The business name in the ad.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue business_name = 3;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getBusinessName()
+ {
+ return $this->business_name;
+ }
+
+ /**
+ * The business name in the ad.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue business_name = 3;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setBusinessName($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->business_name = $var;
+
+ return $this;
+ }
+
+ /**
+ * The first line of the ad's description.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue description1 = 4;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getDescription1()
+ {
+ return $this->description1;
+ }
+
+ /**
+ * The first line of the ad's description.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue description1 = 4;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setDescription1($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->description1 = $var;
+
+ return $this;
+ }
+
+ /**
+ * The second line of the ad's description.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue description2 = 5;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getDescription2()
+ {
+ return $this->description2;
+ }
+
+ /**
+ * The second line of the ad's description.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue description2 = 5;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setDescription2($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->description2 = $var;
+
+ return $this;
+ }
+
+ /**
+ * Whether to enable call tracking for the creative. Enabling call
+ * tracking also enables call conversions.
+ *
+ * Generated from protobuf field .google.protobuf.BoolValue call_tracked = 6;
+ * @return \Google\Protobuf\BoolValue
+ */
+ public function getCallTracked()
+ {
+ return $this->call_tracked;
+ }
+
+ /**
+ * Whether to enable call tracking for the creative. Enabling call
+ * tracking also enables call conversions.
+ *
+ * Generated from protobuf field .google.protobuf.BoolValue call_tracked = 6;
+ * @param \Google\Protobuf\BoolValue $var
+ * @return $this
+ */
+ public function setCallTracked($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\BoolValue::class);
+ $this->call_tracked = $var;
+
+ return $this;
+ }
+
+ /**
+ * Whether to disable call conversion for the creative.
+ * If set to `true`, disables call conversions even when `call_tracked` is
+ * `true`.
+ * If `call_tracked` is `false`, this field is ignored.
+ *
+ * Generated from protobuf field .google.protobuf.BoolValue disable_call_conversion = 7;
+ * @return \Google\Protobuf\BoolValue
+ */
+ public function getDisableCallConversion()
+ {
+ return $this->disable_call_conversion;
+ }
+
+ /**
+ * Whether to disable call conversion for the creative.
+ * If set to `true`, disables call conversions even when `call_tracked` is
+ * `true`.
+ * If `call_tracked` is `false`, this field is ignored.
+ *
+ * Generated from protobuf field .google.protobuf.BoolValue disable_call_conversion = 7;
+ * @param \Google\Protobuf\BoolValue $var
+ * @return $this
+ */
+ public function setDisableCallConversion($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\BoolValue::class);
+ $this->disable_call_conversion = $var;
+
+ return $this;
+ }
+
+ /**
+ * The URL to be used for phone number verification.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue phone_number_verification_url = 8;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getPhoneNumberVerificationUrl()
+ {
+ return $this->phone_number_verification_url;
+ }
+
+ /**
+ * The URL to be used for phone number verification.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue phone_number_verification_url = 8;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setPhoneNumberVerificationUrl($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->phone_number_verification_url = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Common/CustomParameter.php b/src/Google/Ads/GoogleAds/V0/Common/CustomParameter.php
new file mode 100644
index 000000000..c0d046388
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Common/CustomParameter.php
@@ -0,0 +1,90 @@
+google.ads.googleads.v0.common.CustomParameter
+ */
+class CustomParameter extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The key matching the parameter tag name.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue key = 1;
+ */
+ private $key = null;
+ /**
+ * The value to be substituted.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue value = 2;
+ */
+ private $value = null;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Common\CustomParameter::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * The key matching the parameter tag name.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue key = 1;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getKey()
+ {
+ return $this->key;
+ }
+
+ /**
+ * The key matching the parameter tag name.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue key = 1;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setKey($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->key = $var;
+
+ return $this;
+ }
+
+ /**
+ * The value to be substituted.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue value = 2;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getValue()
+ {
+ return $this->value;
+ }
+
+ /**
+ * The value to be substituted.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue value = 2;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setValue($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->value = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Common/DynamicSearchAdInfo.php b/src/Google/Ads/GoogleAds/V0/Common/DynamicSearchAdInfo.php
new file mode 100644
index 000000000..1338d1593
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Common/DynamicSearchAdInfo.php
@@ -0,0 +1,89 @@
+google.ads.googleads.v0.common.DynamicSearchAdInfo
+ */
+class DynamicSearchAdInfo extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The first line of the ad's description.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue description1 = 1;
+ */
+ private $description1 = null;
+ /**
+ * The second line of the ad's description.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue description2 = 2;
+ */
+ private $description2 = null;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Common\Ad::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * The first line of the ad's description.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue description1 = 1;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getDescription1()
+ {
+ return $this->description1;
+ }
+
+ /**
+ * The first line of the ad's description.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue description1 = 1;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setDescription1($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->description1 = $var;
+
+ return $this;
+ }
+
+ /**
+ * The second line of the ad's description.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue description2 = 2;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getDescription2()
+ {
+ return $this->description2;
+ }
+
+ /**
+ * The second line of the ad's description.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue description2 = 2;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setDescription2($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->description2 = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Common/EnhancedCpc.php b/src/Google/Ads/GoogleAds/V0/Common/EnhancedCpc.php
new file mode 100644
index 000000000..da388fb70
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Common/EnhancedCpc.php
@@ -0,0 +1,27 @@
+google.ads.googleads.v0.common.EnhancedCpc
+ */
+class EnhancedCpc extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Common\Bidding::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Common/ExpandedDynamicSearchAdInfo.php b/src/Google/Ads/GoogleAds/V0/Common/ExpandedDynamicSearchAdInfo.php
new file mode 100644
index 000000000..d4816c085
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Common/ExpandedDynamicSearchAdInfo.php
@@ -0,0 +1,57 @@
+google.ads.googleads.v0.common.ExpandedDynamicSearchAdInfo
+ */
+class ExpandedDynamicSearchAdInfo extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The description of the ad.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue description = 1;
+ */
+ private $description = null;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Common\Ad::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * The description of the ad.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue description = 1;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getDescription()
+ {
+ return $this->description;
+ }
+
+ /**
+ * The description of the ad.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue description = 1;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setDescription($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->description = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Common/ExpandedTextAdInfo.php b/src/Google/Ads/GoogleAds/V0/Common/ExpandedTextAdInfo.php
new file mode 100644
index 000000000..5aa14aa0b
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Common/ExpandedTextAdInfo.php
@@ -0,0 +1,185 @@
+google.ads.googleads.v0.common.ExpandedTextAdInfo
+ */
+class ExpandedTextAdInfo extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The first part of the ad's headline.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue headline_part1 = 1;
+ */
+ private $headline_part1 = null;
+ /**
+ * The second part of the ad's headline.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue headline_part2 = 2;
+ */
+ private $headline_part2 = null;
+ /**
+ * The description of the ad.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue description = 3;
+ */
+ private $description = null;
+ /**
+ * The text that can appear alongside the ad's displayed URL.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue path1 = 4;
+ */
+ private $path1 = null;
+ /**
+ * Additional text that can appear alongside the ad's displayed URL.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue path2 = 5;
+ */
+ private $path2 = null;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Common\Ad::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * The first part of the ad's headline.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue headline_part1 = 1;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getHeadlinePart1()
+ {
+ return $this->headline_part1;
+ }
+
+ /**
+ * The first part of the ad's headline.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue headline_part1 = 1;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setHeadlinePart1($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->headline_part1 = $var;
+
+ return $this;
+ }
+
+ /**
+ * The second part of the ad's headline.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue headline_part2 = 2;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getHeadlinePart2()
+ {
+ return $this->headline_part2;
+ }
+
+ /**
+ * The second part of the ad's headline.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue headline_part2 = 2;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setHeadlinePart2($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->headline_part2 = $var;
+
+ return $this;
+ }
+
+ /**
+ * The description of the ad.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue description = 3;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getDescription()
+ {
+ return $this->description;
+ }
+
+ /**
+ * The description of the ad.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue description = 3;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setDescription($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->description = $var;
+
+ return $this;
+ }
+
+ /**
+ * The text that can appear alongside the ad's displayed URL.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue path1 = 4;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getPath1()
+ {
+ return $this->path1;
+ }
+
+ /**
+ * The text that can appear alongside the ad's displayed URL.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue path1 = 4;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setPath1($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->path1 = $var;
+
+ return $this;
+ }
+
+ /**
+ * Additional text that can appear alongside the ad's displayed URL.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue path2 = 5;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getPath2()
+ {
+ return $this->path2;
+ }
+
+ /**
+ * Additional text that can appear alongside the ad's displayed URL.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue path2 = 5;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setPath2($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->path2 = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Common/HotelAdInfo.php b/src/Google/Ads/GoogleAds/V0/Common/HotelAdInfo.php
new file mode 100644
index 000000000..2be65fb31
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Common/HotelAdInfo.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.common.HotelAdInfo
+ */
+class HotelAdInfo extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Common\Ad::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Common/HotelAdvanceBookingWindowInfo.php b/src/Google/Ads/GoogleAds/V0/Common/HotelAdvanceBookingWindowInfo.php
new file mode 100644
index 000000000..1253d38f7
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Common/HotelAdvanceBookingWindowInfo.php
@@ -0,0 +1,89 @@
+google.ads.googleads.v0.common.HotelAdvanceBookingWindowInfo
+ */
+class HotelAdvanceBookingWindowInfo extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * Low end of the number of days prior to the stay.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value min_days = 1;
+ */
+ private $min_days = null;
+ /**
+ * High end of the number of days prior to the stay.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value max_days = 2;
+ */
+ private $max_days = null;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Common\Criteria::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * Low end of the number of days prior to the stay.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value min_days = 1;
+ * @return \Google\Protobuf\Int64Value
+ */
+ public function getMinDays()
+ {
+ return $this->min_days;
+ }
+
+ /**
+ * Low end of the number of days prior to the stay.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value min_days = 1;
+ * @param \Google\Protobuf\Int64Value $var
+ * @return $this
+ */
+ public function setMinDays($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Int64Value::class);
+ $this->min_days = $var;
+
+ return $this;
+ }
+
+ /**
+ * High end of the number of days prior to the stay.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value max_days = 2;
+ * @return \Google\Protobuf\Int64Value
+ */
+ public function getMaxDays()
+ {
+ return $this->max_days;
+ }
+
+ /**
+ * High end of the number of days prior to the stay.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value max_days = 2;
+ * @param \Google\Protobuf\Int64Value $var
+ * @return $this
+ */
+ public function setMaxDays($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Int64Value::class);
+ $this->max_days = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Common/HotelCheckInDayInfo.php b/src/Google/Ads/GoogleAds/V0/Common/HotelCheckInDayInfo.php
new file mode 100644
index 000000000..43d9ee9fe
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Common/HotelCheckInDayInfo.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.common.HotelCheckInDayInfo
+ */
+class HotelCheckInDayInfo extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Common\Criteria::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Common/HotelCityInfo.php b/src/Google/Ads/GoogleAds/V0/Common/HotelCityInfo.php
new file mode 100644
index 000000000..04076ac26
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Common/HotelCityInfo.php
@@ -0,0 +1,57 @@
+google.ads.googleads.v0.common.HotelCityInfo
+ */
+class HotelCityInfo extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The Geo Target Constant resource name.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue city_criterion = 1;
+ */
+ private $city_criterion = null;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Common\Criteria::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * The Geo Target Constant resource name.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue city_criterion = 1;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getCityCriterion()
+ {
+ return $this->city_criterion;
+ }
+
+ /**
+ * The Geo Target Constant resource name.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue city_criterion = 1;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setCityCriterion($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->city_criterion = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Common/HotelClassInfo.php b/src/Google/Ads/GoogleAds/V0/Common/HotelClassInfo.php
new file mode 100644
index 000000000..e8cc420d1
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Common/HotelClassInfo.php
@@ -0,0 +1,57 @@
+google.ads.googleads.v0.common.HotelClassInfo
+ */
+class HotelClassInfo extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * Long value of the hotel class.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value value = 1;
+ */
+ private $value = null;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Common\Criteria::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * Long value of the hotel class.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value value = 1;
+ * @return \Google\Protobuf\Int64Value
+ */
+ public function getValue()
+ {
+ return $this->value;
+ }
+
+ /**
+ * Long value of the hotel class.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value value = 1;
+ * @param \Google\Protobuf\Int64Value $var
+ * @return $this
+ */
+ public function setValue($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Int64Value::class);
+ $this->value = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Common/HotelCountryRegionInfo.php b/src/Google/Ads/GoogleAds/V0/Common/HotelCountryRegionInfo.php
new file mode 100644
index 000000000..5983e74b2
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Common/HotelCountryRegionInfo.php
@@ -0,0 +1,57 @@
+google.ads.googleads.v0.common.HotelCountryRegionInfo
+ */
+class HotelCountryRegionInfo extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The Geo Target Constant resource name.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue country_region_criterion = 1;
+ */
+ private $country_region_criterion = null;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Common\Criteria::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * The Geo Target Constant resource name.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue country_region_criterion = 1;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getCountryRegionCriterion()
+ {
+ return $this->country_region_criterion;
+ }
+
+ /**
+ * The Geo Target Constant resource name.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue country_region_criterion = 1;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setCountryRegionCriterion($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->country_region_criterion = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Common/HotelDateSelectionTypeInfo.php b/src/Google/Ads/GoogleAds/V0/Common/HotelDateSelectionTypeInfo.php
new file mode 100644
index 000000000..a7236cbf0
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Common/HotelDateSelectionTypeInfo.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.common.HotelDateSelectionTypeInfo
+ */
+class HotelDateSelectionTypeInfo extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Common\Criteria::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Common/HotelIdInfo.php b/src/Google/Ads/GoogleAds/V0/Common/HotelIdInfo.php
new file mode 100644
index 000000000..4395661f5
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Common/HotelIdInfo.php
@@ -0,0 +1,57 @@
+google.ads.googleads.v0.common.HotelIdInfo
+ */
+class HotelIdInfo extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * String value of the hotel ID.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue value = 1;
+ */
+ private $value = null;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Common\Criteria::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * String value of the hotel ID.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue value = 1;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getValue()
+ {
+ return $this->value;
+ }
+
+ /**
+ * String value of the hotel ID.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue value = 1;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setValue($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->value = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Common/HotelLengthOfStayInfo.php b/src/Google/Ads/GoogleAds/V0/Common/HotelLengthOfStayInfo.php
new file mode 100644
index 000000000..f6efcf112
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Common/HotelLengthOfStayInfo.php
@@ -0,0 +1,89 @@
+google.ads.googleads.v0.common.HotelLengthOfStayInfo
+ */
+class HotelLengthOfStayInfo extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * Low end of the number of nights in the stay.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value min_nights = 1;
+ */
+ private $min_nights = null;
+ /**
+ * High end of the number of nights in the stay.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value max_nights = 2;
+ */
+ private $max_nights = null;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Common\Criteria::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * Low end of the number of nights in the stay.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value min_nights = 1;
+ * @return \Google\Protobuf\Int64Value
+ */
+ public function getMinNights()
+ {
+ return $this->min_nights;
+ }
+
+ /**
+ * Low end of the number of nights in the stay.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value min_nights = 1;
+ * @param \Google\Protobuf\Int64Value $var
+ * @return $this
+ */
+ public function setMinNights($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Int64Value::class);
+ $this->min_nights = $var;
+
+ return $this;
+ }
+
+ /**
+ * High end of the number of nights in the stay.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value max_nights = 2;
+ * @return \Google\Protobuf\Int64Value
+ */
+ public function getMaxNights()
+ {
+ return $this->max_nights;
+ }
+
+ /**
+ * High end of the number of nights in the stay.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value max_nights = 2;
+ * @param \Google\Protobuf\Int64Value $var
+ * @return $this
+ */
+ public function setMaxNights($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Int64Value::class);
+ $this->max_nights = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Common/HotelStateInfo.php b/src/Google/Ads/GoogleAds/V0/Common/HotelStateInfo.php
new file mode 100644
index 000000000..80f15ba71
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Common/HotelStateInfo.php
@@ -0,0 +1,57 @@
+google.ads.googleads.v0.common.HotelStateInfo
+ */
+class HotelStateInfo extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The Geo Target Constant resource name.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue state_criterion = 1;
+ */
+ private $state_criterion = null;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Common\Criteria::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * The Geo Target Constant resource name.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue state_criterion = 1;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getStateCriterion()
+ {
+ return $this->state_criterion;
+ }
+
+ /**
+ * The Geo Target Constant resource name.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue state_criterion = 1;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setStateCriterion($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->state_criterion = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Common/KeywordInfo.php b/src/Google/Ads/GoogleAds/V0/Common/KeywordInfo.php
new file mode 100644
index 000000000..b2f93599c
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Common/KeywordInfo.php
@@ -0,0 +1,89 @@
+google.ads.googleads.v0.common.KeywordInfo
+ */
+class KeywordInfo extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The text of the keyword (at most 80 characters and 10 words).
+ *
+ * Generated from protobuf field .google.protobuf.StringValue text = 1;
+ */
+ private $text = null;
+ /**
+ * The match type of the keyword.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.KeywordMatchTypeEnum.KeywordMatchType match_type = 2;
+ */
+ private $match_type = 0;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Common\Criteria::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * The text of the keyword (at most 80 characters and 10 words).
+ *
+ * Generated from protobuf field .google.protobuf.StringValue text = 1;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getText()
+ {
+ return $this->text;
+ }
+
+ /**
+ * The text of the keyword (at most 80 characters and 10 words).
+ *
+ * Generated from protobuf field .google.protobuf.StringValue text = 1;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setText($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->text = $var;
+
+ return $this;
+ }
+
+ /**
+ * The match type of the keyword.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.KeywordMatchTypeEnum.KeywordMatchType match_type = 2;
+ * @return int
+ */
+ public function getMatchType()
+ {
+ return $this->match_type;
+ }
+
+ /**
+ * The match type of the keyword.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.KeywordMatchTypeEnum.KeywordMatchType match_type = 2;
+ * @param int $var
+ * @return $this
+ */
+ public function setMatchType($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Enums\KeywordMatchTypeEnum_KeywordMatchType::class);
+ $this->match_type = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Common/ListingBrandInfo.php b/src/Google/Ads/GoogleAds/V0/Common/ListingBrandInfo.php
new file mode 100644
index 000000000..143350e47
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Common/ListingBrandInfo.php
@@ -0,0 +1,57 @@
+google.ads.googleads.v0.common.ListingBrandInfo
+ */
+class ListingBrandInfo extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * String value of the listing brand.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue value = 1;
+ */
+ private $value = null;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Common\Criteria::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * String value of the listing brand.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue value = 1;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getValue()
+ {
+ return $this->value;
+ }
+
+ /**
+ * String value of the listing brand.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue value = 1;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setValue($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->value = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Common/ListingCustomAttributeInfo.php b/src/Google/Ads/GoogleAds/V0/Common/ListingCustomAttributeInfo.php
new file mode 100644
index 000000000..81a7b166d
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Common/ListingCustomAttributeInfo.php
@@ -0,0 +1,89 @@
+google.ads.googleads.v0.common.ListingCustomAttributeInfo
+ */
+class ListingCustomAttributeInfo extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * String value of the listing custom attribute.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue value = 1;
+ */
+ private $value = null;
+ /**
+ * Indicates the index of the custom attribute.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.ListingCustomAttributeIndexEnum.ListingCustomAttributeIndex index = 2;
+ */
+ private $index = 0;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Common\Criteria::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * String value of the listing custom attribute.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue value = 1;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getValue()
+ {
+ return $this->value;
+ }
+
+ /**
+ * String value of the listing custom attribute.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue value = 1;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setValue($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->value = $var;
+
+ return $this;
+ }
+
+ /**
+ * Indicates the index of the custom attribute.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.ListingCustomAttributeIndexEnum.ListingCustomAttributeIndex index = 2;
+ * @return int
+ */
+ public function getIndex()
+ {
+ return $this->index;
+ }
+
+ /**
+ * Indicates the index of the custom attribute.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.ListingCustomAttributeIndexEnum.ListingCustomAttributeIndex index = 2;
+ * @param int $var
+ * @return $this
+ */
+ public function setIndex($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Enums\ListingCustomAttributeIndexEnum_ListingCustomAttributeIndex::class);
+ $this->index = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Common/ListingDimensionInfo.php b/src/Google/Ads/GoogleAds/V0/Common/ListingDimensionInfo.php
new file mode 100644
index 000000000..3b2a289fe
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Common/ListingDimensionInfo.php
@@ -0,0 +1,216 @@
+google.ads.googleads.v0.common.ListingDimensionInfo
+ */
+class ListingDimensionInfo extends \Google\Protobuf\Internal\Message
+{
+ protected $dimension;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Common\Criteria::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * Brand of the listing.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.ListingBrandInfo listing_brand = 1;
+ * @return \Google\Ads\GoogleAds\V0\Common\ListingBrandInfo
+ */
+ public function getListingBrand()
+ {
+ return $this->readOneof(1);
+ }
+
+ /**
+ * Brand of the listing.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.ListingBrandInfo listing_brand = 1;
+ * @param \Google\Ads\GoogleAds\V0\Common\ListingBrandInfo $var
+ * @return $this
+ */
+ public function setListingBrand($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Common\ListingBrandInfo::class);
+ $this->writeOneof(1, $var);
+
+ return $this;
+ }
+
+ /**
+ * Advertiser-specific hotel ID.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.HotelIdInfo hotel_id = 2;
+ * @return \Google\Ads\GoogleAds\V0\Common\HotelIdInfo
+ */
+ public function getHotelId()
+ {
+ return $this->readOneof(2);
+ }
+
+ /**
+ * Advertiser-specific hotel ID.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.HotelIdInfo hotel_id = 2;
+ * @param \Google\Ads\GoogleAds\V0\Common\HotelIdInfo $var
+ * @return $this
+ */
+ public function setHotelId($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Common\HotelIdInfo::class);
+ $this->writeOneof(2, $var);
+
+ return $this;
+ }
+
+ /**
+ * Class of the hotel as a number of stars 1 to 5.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.HotelClassInfo hotel_class = 3;
+ * @return \Google\Ads\GoogleAds\V0\Common\HotelClassInfo
+ */
+ public function getHotelClass()
+ {
+ return $this->readOneof(3);
+ }
+
+ /**
+ * Class of the hotel as a number of stars 1 to 5.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.HotelClassInfo hotel_class = 3;
+ * @param \Google\Ads\GoogleAds\V0\Common\HotelClassInfo $var
+ * @return $this
+ */
+ public function setHotelClass($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Common\HotelClassInfo::class);
+ $this->writeOneof(3, $var);
+
+ return $this;
+ }
+
+ /**
+ * Country or Region the hotel is located in.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.HotelCountryRegionInfo hotel_country_region = 4;
+ * @return \Google\Ads\GoogleAds\V0\Common\HotelCountryRegionInfo
+ */
+ public function getHotelCountryRegion()
+ {
+ return $this->readOneof(4);
+ }
+
+ /**
+ * Country or Region the hotel is located in.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.HotelCountryRegionInfo hotel_country_region = 4;
+ * @param \Google\Ads\GoogleAds\V0\Common\HotelCountryRegionInfo $var
+ * @return $this
+ */
+ public function setHotelCountryRegion($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Common\HotelCountryRegionInfo::class);
+ $this->writeOneof(4, $var);
+
+ return $this;
+ }
+
+ /**
+ * State the hotel is located in.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.HotelStateInfo hotel_state = 5;
+ * @return \Google\Ads\GoogleAds\V0\Common\HotelStateInfo
+ */
+ public function getHotelState()
+ {
+ return $this->readOneof(5);
+ }
+
+ /**
+ * State the hotel is located in.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.HotelStateInfo hotel_state = 5;
+ * @param \Google\Ads\GoogleAds\V0\Common\HotelStateInfo $var
+ * @return $this
+ */
+ public function setHotelState($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Common\HotelStateInfo::class);
+ $this->writeOneof(5, $var);
+
+ return $this;
+ }
+
+ /**
+ * City the hotel is located in.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.HotelCityInfo hotel_city = 6;
+ * @return \Google\Ads\GoogleAds\V0\Common\HotelCityInfo
+ */
+ public function getHotelCity()
+ {
+ return $this->readOneof(6);
+ }
+
+ /**
+ * City the hotel is located in.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.HotelCityInfo hotel_city = 6;
+ * @param \Google\Ads\GoogleAds\V0\Common\HotelCityInfo $var
+ * @return $this
+ */
+ public function setHotelCity($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Common\HotelCityInfo::class);
+ $this->writeOneof(6, $var);
+
+ return $this;
+ }
+
+ /**
+ * Listing custom attribute.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.ListingCustomAttributeInfo listing_custom_attribute = 7;
+ * @return \Google\Ads\GoogleAds\V0\Common\ListingCustomAttributeInfo
+ */
+ public function getListingCustomAttribute()
+ {
+ return $this->readOneof(7);
+ }
+
+ /**
+ * Listing custom attribute.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.ListingCustomAttributeInfo listing_custom_attribute = 7;
+ * @param \Google\Ads\GoogleAds\V0\Common\ListingCustomAttributeInfo $var
+ * @return $this
+ */
+ public function setListingCustomAttribute($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Common\ListingCustomAttributeInfo::class);
+ $this->writeOneof(7, $var);
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getDimension()
+ {
+ return $this->whichOneof("dimension");
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Common/ListingGroupInfo.php b/src/Google/Ads/GoogleAds/V0/Common/ListingGroupInfo.php
new file mode 100644
index 000000000..6f19de40f
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Common/ListingGroupInfo.php
@@ -0,0 +1,124 @@
+google.ads.googleads.v0.common.ListingGroupInfo
+ */
+class ListingGroupInfo extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * Type of the listing group.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.ListingGroupTypeEnum.ListingGroupType type = 1;
+ */
+ private $type = 0;
+ /**
+ * Dimension value with which this listing group is refining its parent.
+ * Undefined for the root group.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.ListingDimensionInfo case_value = 2;
+ */
+ private $case_value = null;
+ /**
+ * ID of the parent listing group subdivision. Undefined for the root group.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value parent_criterion_id = 3;
+ */
+ private $parent_criterion_id = null;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Common\Criteria::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * Type of the listing group.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.ListingGroupTypeEnum.ListingGroupType type = 1;
+ * @return int
+ */
+ public function getType()
+ {
+ return $this->type;
+ }
+
+ /**
+ * Type of the listing group.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.ListingGroupTypeEnum.ListingGroupType type = 1;
+ * @param int $var
+ * @return $this
+ */
+ public function setType($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Enums\ListingGroupTypeEnum_ListingGroupType::class);
+ $this->type = $var;
+
+ return $this;
+ }
+
+ /**
+ * Dimension value with which this listing group is refining its parent.
+ * Undefined for the root group.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.ListingDimensionInfo case_value = 2;
+ * @return \Google\Ads\GoogleAds\V0\Common\ListingDimensionInfo
+ */
+ public function getCaseValue()
+ {
+ return $this->case_value;
+ }
+
+ /**
+ * Dimension value with which this listing group is refining its parent.
+ * Undefined for the root group.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.ListingDimensionInfo case_value = 2;
+ * @param \Google\Ads\GoogleAds\V0\Common\ListingDimensionInfo $var
+ * @return $this
+ */
+ public function setCaseValue($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Common\ListingDimensionInfo::class);
+ $this->case_value = $var;
+
+ return $this;
+ }
+
+ /**
+ * ID of the parent listing group subdivision. Undefined for the root group.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value parent_criterion_id = 3;
+ * @return \Google\Protobuf\Int64Value
+ */
+ public function getParentCriterionId()
+ {
+ return $this->parent_criterion_id;
+ }
+
+ /**
+ * ID of the parent listing group subdivision. Undefined for the root group.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value parent_criterion_id = 3;
+ * @param \Google\Protobuf\Int64Value $var
+ * @return $this
+ */
+ public function setParentCriterionId($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Int64Value::class);
+ $this->parent_criterion_id = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Common/LocationInfo.php b/src/Google/Ads/GoogleAds/V0/Common/LocationInfo.php
new file mode 100644
index 000000000..1ddfc479c
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Common/LocationInfo.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.common.LocationInfo
+ */
+class LocationInfo extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Common\Criteria::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Common/ManualCpc.php b/src/Google/Ads/GoogleAds/V0/Common/ManualCpc.php
new file mode 100644
index 000000000..e2c54d77d
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Common/ManualCpc.php
@@ -0,0 +1,57 @@
+google.ads.googleads.v0.common.ManualCpc
+ */
+class ManualCpc extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * Whether bids are to be enhanced based on conversion optimizer data.
+ *
+ * Generated from protobuf field .google.protobuf.BoolValue enhanced_cpc_enabled = 1;
+ */
+ private $enhanced_cpc_enabled = null;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Common\Bidding::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * Whether bids are to be enhanced based on conversion optimizer data.
+ *
+ * Generated from protobuf field .google.protobuf.BoolValue enhanced_cpc_enabled = 1;
+ * @return \Google\Protobuf\BoolValue
+ */
+ public function getEnhancedCpcEnabled()
+ {
+ return $this->enhanced_cpc_enabled;
+ }
+
+ /**
+ * Whether bids are to be enhanced based on conversion optimizer data.
+ *
+ * Generated from protobuf field .google.protobuf.BoolValue enhanced_cpc_enabled = 1;
+ * @param \Google\Protobuf\BoolValue $var
+ * @return $this
+ */
+ public function setEnhancedCpcEnabled($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\BoolValue::class);
+ $this->enhanced_cpc_enabled = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Common/ManualCpm.php b/src/Google/Ads/GoogleAds/V0/Common/ManualCpm.php
new file mode 100644
index 000000000..a64be6928
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Common/ManualCpm.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.common.ManualCpm
+ */
+class ManualCpm extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Common\Bidding::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Common/MaximizeConversionValue.php b/src/Google/Ads/GoogleAds/V0/Common/MaximizeConversionValue.php
new file mode 100644
index 000000000..fb4789e69
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Common/MaximizeConversionValue.php
@@ -0,0 +1,70 @@
+google.ads.googleads.v0.common.MaximizeConversionValue
+ */
+class MaximizeConversionValue extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The target return on ad spend (ROAS) option. If set, the bid strategy will
+ * maximize revenue while averaging the target return on ad spend. If the
+ * target ROAS is high, the bid strategy may not be able to spend the full
+ * budget. If the target ROAS is not set, the bid strategy will aim to
+ * achieve the highest possible ROAS for the budget.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue target_roas = 1;
+ */
+ private $target_roas = null;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Common\Bidding::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * The target return on ad spend (ROAS) option. If set, the bid strategy will
+ * maximize revenue while averaging the target return on ad spend. If the
+ * target ROAS is high, the bid strategy may not be able to spend the full
+ * budget. If the target ROAS is not set, the bid strategy will aim to
+ * achieve the highest possible ROAS for the budget.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue target_roas = 1;
+ * @return \Google\Protobuf\DoubleValue
+ */
+ public function getTargetRoas()
+ {
+ return $this->target_roas;
+ }
+
+ /**
+ * The target return on ad spend (ROAS) option. If set, the bid strategy will
+ * maximize revenue while averaging the target return on ad spend. If the
+ * target ROAS is high, the bid strategy may not be able to spend the full
+ * budget. If the target ROAS is not set, the bid strategy will aim to
+ * achieve the highest possible ROAS for the budget.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue target_roas = 1;
+ * @param \Google\Protobuf\DoubleValue $var
+ * @return $this
+ */
+ public function setTargetRoas($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\DoubleValue::class);
+ $this->target_roas = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Common/MaximizeConversions.php b/src/Google/Ads/GoogleAds/V0/Common/MaximizeConversions.php
new file mode 100644
index 000000000..7e2859dc2
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Common/MaximizeConversions.php
@@ -0,0 +1,26 @@
+google.ads.googleads.v0.common.MaximizeConversions
+ */
+class MaximizeConversions extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Common\Bidding::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Common/Metrics.php b/src/Google/Ads/GoogleAds/V0/Common/Metrics.php
new file mode 100644
index 000000000..71ca7f259
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Common/Metrics.php
@@ -0,0 +1,1551 @@
+google.ads.googleads.v0.common.Metrics
+ */
+class Metrics extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * All conversions divided by the number of ad interactions.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue all_conversion_rate = 5;
+ */
+ private $all_conversion_rate = null;
+ /**
+ * The total value of all conversions.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue all_conversion_value = 6;
+ */
+ private $all_conversion_value = null;
+ /**
+ * The total number of conversions. This includes "Conversions" plus
+ * conversions that have their "Include in Conversions" setting unchecked.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue all_conversions = 7;
+ */
+ private $all_conversions = null;
+ /**
+ * The value of all conversions divided by the total cost of ad interactions
+ * (such as clicks for text ads or views for video ads).
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue all_conversions_value_per_cost = 62;
+ */
+ private $all_conversions_value_per_cost = null;
+ /**
+ * The value of all conversions divided by the total number of interactions.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue all_conversions_value_per_interaction = 61;
+ */
+ private $all_conversions_value_per_interaction = null;
+ /**
+ * The average amount you pay per interaction. This amount is the total cost
+ * of your ads divided by the total number of interactions.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue average_cost = 8;
+ */
+ private $average_cost = null;
+ /**
+ * The total cost of all clicks divided by the total number of clicks
+ * received.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue average_cpc = 9;
+ */
+ private $average_cpc = null;
+ /**
+ * Average cost-per-thousand impressions (CPM).
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue average_cpm = 10;
+ */
+ private $average_cpm = null;
+ /**
+ * Your ad's position relative to those of other advertisers.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue average_position = 13;
+ */
+ private $average_position = null;
+ /**
+ * Percentage of clicks where the user only visited a single page on your
+ * site. Imported from Google Analytics.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue bounce_rate = 15;
+ */
+ private $bounce_rate = null;
+ /**
+ * The number of clicks.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value clicks = 19;
+ */
+ private $clicks = null;
+ /**
+ * The estimated percent of times that your ad was eligible to show
+ * on the Display Network but didn't because your budget was too low.
+ * Note: Content budget lost impression share is reported in the range of 0
+ * to 0.9. Any value above 0.9 is reported as 0.9001.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue content_budget_lost_impression_share = 20;
+ */
+ private $content_budget_lost_impression_share = null;
+ /**
+ * The impressions you've received on the Display Network divided
+ * by the estimated number of impressions you were eligible to receive.
+ * Note: Content impression share is reported in the range of 0.1 to 1. Any
+ * value below 0.1 is reported as 0.0999.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue content_impression_share = 21;
+ */
+ private $content_impression_share = null;
+ /**
+ * The estimated percentage of impressions on the Display Network
+ * that your ads didn't receive due to poor Ad Rank.
+ * Note: Content rank lost impression share is reported in the range of 0
+ * to 0.9. Any value above 0.9 is reported as 0.9001.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue content_rank_lost_impression_share = 22;
+ */
+ private $content_rank_lost_impression_share = null;
+ /**
+ * Conversions divided by the number of ad interactions (such as clicks for
+ * text ads or views for video ads).
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue conversion_rate = 23;
+ */
+ private $conversion_rate = null;
+ /**
+ * The total value of conversions.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue conversion_value = 24;
+ */
+ private $conversion_value = null;
+ /**
+ * The value of conversions divided by the cost of ad interactions.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue conversion_value_per_cost = 64;
+ */
+ private $conversion_value_per_cost = null;
+ /**
+ * The value of conversions divided by the number of ad interactions.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue conversion_value_per_interaction = 63;
+ */
+ private $conversion_value_per_interaction = null;
+ /**
+ * The number of conversions. This only includes conversion actions which have
+ * "Include in Conversions" checked.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue conversions = 25;
+ */
+ private $conversions = null;
+ /**
+ * The sum of your cost-per-click (CPC) and cost-per-thousand impressions
+ * (CPM) costs during this period.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value cost_micros = 26;
+ */
+ private $cost_micros = null;
+ /**
+ * The cost of ad interactions divided by all conversions.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue cost_per_all_conversion = 27;
+ */
+ private $cost_per_all_conversion = null;
+ /**
+ * The cost of ad interactions divided by conversions.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue cost_per_conversion = 28;
+ */
+ private $cost_per_conversion = null;
+ /**
+ * Conversions from when a customer clicks on an AdWords ad on one device,
+ * then converts on a different device or browser.
+ * Cross-device conversions are already included in all_conversions.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue cross_device_conversions = 29;
+ */
+ private $cross_device_conversions = null;
+ /**
+ * The number of clicks your ad receives (Clicks) divided by the number
+ * of times your ad is shown (Impressions).
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue ctr = 30;
+ */
+ private $ctr = null;
+ /**
+ * How often people engage with your ad after it's shown to them. This is the
+ * number of ad expansions divided by the number of times your ad is shown.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue engagement_rate = 31;
+ */
+ private $engagement_rate = null;
+ /**
+ * The number of engagements.
+ * An engagement occurs when a viewer expands your Lightbox ad. Also, in the
+ * future, other ad types may support engagement metrics.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value engagements = 32;
+ */
+ private $engagements = null;
+ /**
+ * Count of how often your ad has appeared on a search results page or
+ * website on the Google Network.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value impressions = 37;
+ */
+ private $impressions = null;
+ /**
+ * How often people interact with your ad after it is shown to them.
+ * This is the number of interactions divided by the number of times your ad
+ * is shown.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue interaction_rate = 38;
+ */
+ private $interaction_rate = null;
+ /**
+ * The number of interactions.
+ * An interaction is the main user action associated with an ad format-clicks
+ * for text and shopping ads, views for video ads, and so on.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value interactions = 39;
+ */
+ private $interactions = null;
+ /**
+ * The percentage of clicks filtered out of your total number of clicks
+ * (filtered + non-filtered clicks) during the reporting period.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue invalid_click_rate = 40;
+ */
+ private $invalid_click_rate = null;
+ /**
+ * Number of clicks Google considers illegitimate and doesn't charge you for.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value invalid_clicks = 41;
+ */
+ private $invalid_clicks = null;
+ /**
+ * Percentage of first-time sessions (from people who had never visited your
+ * site before). Imported from Google Analytics.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue percent_new_visitors = 42;
+ */
+ private $percent_new_visitors = null;
+ /**
+ * Number of offline phone calls.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value phone_calls = 43;
+ */
+ private $phone_calls = null;
+ /**
+ * Number of offline phone impressions.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value phone_impressions = 44;
+ */
+ private $phone_impressions = null;
+ /**
+ * Number of phone calls received (phone_calls) divided by the number of
+ * times your phone number is shown (phone_impressions).
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue phone_through_rate = 45;
+ */
+ private $phone_through_rate = null;
+ /**
+ * Your clickthrough rate (Ctr) divided by the average clickthrough rate of
+ * all advertisers on the websites that show your ads. Measures how your ads
+ * perform on Display Network sites compared to other ads on the same sites.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue relative_ctr = 46;
+ */
+ private $relative_ctr = null;
+ /**
+ * The estimated percent of times that your ad was eligible to show on the
+ * Search Network but didn't because your budget was too low. Note: Search
+ * budget lost impression share is reported in the range of 0 to 0.9. Any
+ * value above 0.9 is reported as 0.9001.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue search_budget_lost_impression_share = 47;
+ */
+ private $search_budget_lost_impression_share = null;
+ /**
+ * The impressions you've received divided by the estimated number of
+ * impressions you were eligible to receive on the Search Network for search
+ * terms that matched your keywords exactly (or were close variants of your
+ * keyword), regardless of your keyword match types. Note: Search exact match
+ * impression share is reported in the range of 0.1 to 1. Any value below 0.1
+ * is reported as 0.0999.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue search_exact_match_impression_share = 49;
+ */
+ private $search_exact_match_impression_share = null;
+ /**
+ * The impressions you've received on the Search Network divided
+ * by the estimated number of impressions you were eligible to receive.
+ * Note: Search impression share is reported in the range of 0.1 to 1. Any
+ * value below 0.1 is reported as 0.0999.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue search_impression_share = 50;
+ */
+ private $search_impression_share = null;
+ /**
+ * The estimated percentage of impressions on the Search Network
+ * that your ads didn't receive due to poor Ad Rank.
+ * Note: Search rank lost impression share is reported in the range of 0 to
+ * 0.9. Any value above 0.9 is reported as 0.9001.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue search_rank_lost_impression_share = 51;
+ */
+ private $search_rank_lost_impression_share = null;
+ /**
+ * The value of all conversions divided by the number of all conversions.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue value_per_all_conversions = 52;
+ */
+ private $value_per_all_conversions = null;
+ /**
+ * The value of conversions divided by the number of conversions.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue value_per_conversion = 53;
+ */
+ private $value_per_conversion = null;
+ /**
+ * The total number of view-through conversions.
+ * These happen when a customer sees an image or rich media ad, then later
+ * completes a conversion on your site without interacting with (e.g.,
+ * clicking on) another ad.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value view_through_conversions = 60;
+ */
+ private $view_through_conversions = null;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Common\Metrics::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * All conversions divided by the number of ad interactions.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue all_conversion_rate = 5;
+ * @return \Google\Protobuf\DoubleValue
+ */
+ public function getAllConversionRate()
+ {
+ return $this->all_conversion_rate;
+ }
+
+ /**
+ * All conversions divided by the number of ad interactions.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue all_conversion_rate = 5;
+ * @param \Google\Protobuf\DoubleValue $var
+ * @return $this
+ */
+ public function setAllConversionRate($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\DoubleValue::class);
+ $this->all_conversion_rate = $var;
+
+ return $this;
+ }
+
+ /**
+ * The total value of all conversions.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue all_conversion_value = 6;
+ * @return \Google\Protobuf\DoubleValue
+ */
+ public function getAllConversionValue()
+ {
+ return $this->all_conversion_value;
+ }
+
+ /**
+ * The total value of all conversions.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue all_conversion_value = 6;
+ * @param \Google\Protobuf\DoubleValue $var
+ * @return $this
+ */
+ public function setAllConversionValue($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\DoubleValue::class);
+ $this->all_conversion_value = $var;
+
+ return $this;
+ }
+
+ /**
+ * The total number of conversions. This includes "Conversions" plus
+ * conversions that have their "Include in Conversions" setting unchecked.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue all_conversions = 7;
+ * @return \Google\Protobuf\DoubleValue
+ */
+ public function getAllConversions()
+ {
+ return $this->all_conversions;
+ }
+
+ /**
+ * The total number of conversions. This includes "Conversions" plus
+ * conversions that have their "Include in Conversions" setting unchecked.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue all_conversions = 7;
+ * @param \Google\Protobuf\DoubleValue $var
+ * @return $this
+ */
+ public function setAllConversions($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\DoubleValue::class);
+ $this->all_conversions = $var;
+
+ return $this;
+ }
+
+ /**
+ * The value of all conversions divided by the total cost of ad interactions
+ * (such as clicks for text ads or views for video ads).
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue all_conversions_value_per_cost = 62;
+ * @return \Google\Protobuf\DoubleValue
+ */
+ public function getAllConversionsValuePerCost()
+ {
+ return $this->all_conversions_value_per_cost;
+ }
+
+ /**
+ * The value of all conversions divided by the total cost of ad interactions
+ * (such as clicks for text ads or views for video ads).
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue all_conversions_value_per_cost = 62;
+ * @param \Google\Protobuf\DoubleValue $var
+ * @return $this
+ */
+ public function setAllConversionsValuePerCost($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\DoubleValue::class);
+ $this->all_conversions_value_per_cost = $var;
+
+ return $this;
+ }
+
+ /**
+ * The value of all conversions divided by the total number of interactions.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue all_conversions_value_per_interaction = 61;
+ * @return \Google\Protobuf\DoubleValue
+ */
+ public function getAllConversionsValuePerInteraction()
+ {
+ return $this->all_conversions_value_per_interaction;
+ }
+
+ /**
+ * The value of all conversions divided by the total number of interactions.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue all_conversions_value_per_interaction = 61;
+ * @param \Google\Protobuf\DoubleValue $var
+ * @return $this
+ */
+ public function setAllConversionsValuePerInteraction($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\DoubleValue::class);
+ $this->all_conversions_value_per_interaction = $var;
+
+ return $this;
+ }
+
+ /**
+ * The average amount you pay per interaction. This amount is the total cost
+ * of your ads divided by the total number of interactions.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue average_cost = 8;
+ * @return \Google\Protobuf\DoubleValue
+ */
+ public function getAverageCost()
+ {
+ return $this->average_cost;
+ }
+
+ /**
+ * The average amount you pay per interaction. This amount is the total cost
+ * of your ads divided by the total number of interactions.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue average_cost = 8;
+ * @param \Google\Protobuf\DoubleValue $var
+ * @return $this
+ */
+ public function setAverageCost($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\DoubleValue::class);
+ $this->average_cost = $var;
+
+ return $this;
+ }
+
+ /**
+ * The total cost of all clicks divided by the total number of clicks
+ * received.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue average_cpc = 9;
+ * @return \Google\Protobuf\DoubleValue
+ */
+ public function getAverageCpc()
+ {
+ return $this->average_cpc;
+ }
+
+ /**
+ * The total cost of all clicks divided by the total number of clicks
+ * received.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue average_cpc = 9;
+ * @param \Google\Protobuf\DoubleValue $var
+ * @return $this
+ */
+ public function setAverageCpc($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\DoubleValue::class);
+ $this->average_cpc = $var;
+
+ return $this;
+ }
+
+ /**
+ * Average cost-per-thousand impressions (CPM).
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue average_cpm = 10;
+ * @return \Google\Protobuf\DoubleValue
+ */
+ public function getAverageCpm()
+ {
+ return $this->average_cpm;
+ }
+
+ /**
+ * Average cost-per-thousand impressions (CPM).
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue average_cpm = 10;
+ * @param \Google\Protobuf\DoubleValue $var
+ * @return $this
+ */
+ public function setAverageCpm($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\DoubleValue::class);
+ $this->average_cpm = $var;
+
+ return $this;
+ }
+
+ /**
+ * Your ad's position relative to those of other advertisers.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue average_position = 13;
+ * @return \Google\Protobuf\DoubleValue
+ */
+ public function getAveragePosition()
+ {
+ return $this->average_position;
+ }
+
+ /**
+ * Your ad's position relative to those of other advertisers.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue average_position = 13;
+ * @param \Google\Protobuf\DoubleValue $var
+ * @return $this
+ */
+ public function setAveragePosition($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\DoubleValue::class);
+ $this->average_position = $var;
+
+ return $this;
+ }
+
+ /**
+ * Percentage of clicks where the user only visited a single page on your
+ * site. Imported from Google Analytics.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue bounce_rate = 15;
+ * @return \Google\Protobuf\DoubleValue
+ */
+ public function getBounceRate()
+ {
+ return $this->bounce_rate;
+ }
+
+ /**
+ * Percentage of clicks where the user only visited a single page on your
+ * site. Imported from Google Analytics.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue bounce_rate = 15;
+ * @param \Google\Protobuf\DoubleValue $var
+ * @return $this
+ */
+ public function setBounceRate($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\DoubleValue::class);
+ $this->bounce_rate = $var;
+
+ return $this;
+ }
+
+ /**
+ * The number of clicks.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value clicks = 19;
+ * @return \Google\Protobuf\Int64Value
+ */
+ public function getClicks()
+ {
+ return $this->clicks;
+ }
+
+ /**
+ * The number of clicks.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value clicks = 19;
+ * @param \Google\Protobuf\Int64Value $var
+ * @return $this
+ */
+ public function setClicks($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Int64Value::class);
+ $this->clicks = $var;
+
+ return $this;
+ }
+
+ /**
+ * The estimated percent of times that your ad was eligible to show
+ * on the Display Network but didn't because your budget was too low.
+ * Note: Content budget lost impression share is reported in the range of 0
+ * to 0.9. Any value above 0.9 is reported as 0.9001.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue content_budget_lost_impression_share = 20;
+ * @return \Google\Protobuf\DoubleValue
+ */
+ public function getContentBudgetLostImpressionShare()
+ {
+ return $this->content_budget_lost_impression_share;
+ }
+
+ /**
+ * The estimated percent of times that your ad was eligible to show
+ * on the Display Network but didn't because your budget was too low.
+ * Note: Content budget lost impression share is reported in the range of 0
+ * to 0.9. Any value above 0.9 is reported as 0.9001.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue content_budget_lost_impression_share = 20;
+ * @param \Google\Protobuf\DoubleValue $var
+ * @return $this
+ */
+ public function setContentBudgetLostImpressionShare($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\DoubleValue::class);
+ $this->content_budget_lost_impression_share = $var;
+
+ return $this;
+ }
+
+ /**
+ * The impressions you've received on the Display Network divided
+ * by the estimated number of impressions you were eligible to receive.
+ * Note: Content impression share is reported in the range of 0.1 to 1. Any
+ * value below 0.1 is reported as 0.0999.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue content_impression_share = 21;
+ * @return \Google\Protobuf\DoubleValue
+ */
+ public function getContentImpressionShare()
+ {
+ return $this->content_impression_share;
+ }
+
+ /**
+ * The impressions you've received on the Display Network divided
+ * by the estimated number of impressions you were eligible to receive.
+ * Note: Content impression share is reported in the range of 0.1 to 1. Any
+ * value below 0.1 is reported as 0.0999.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue content_impression_share = 21;
+ * @param \Google\Protobuf\DoubleValue $var
+ * @return $this
+ */
+ public function setContentImpressionShare($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\DoubleValue::class);
+ $this->content_impression_share = $var;
+
+ return $this;
+ }
+
+ /**
+ * The estimated percentage of impressions on the Display Network
+ * that your ads didn't receive due to poor Ad Rank.
+ * Note: Content rank lost impression share is reported in the range of 0
+ * to 0.9. Any value above 0.9 is reported as 0.9001.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue content_rank_lost_impression_share = 22;
+ * @return \Google\Protobuf\DoubleValue
+ */
+ public function getContentRankLostImpressionShare()
+ {
+ return $this->content_rank_lost_impression_share;
+ }
+
+ /**
+ * The estimated percentage of impressions on the Display Network
+ * that your ads didn't receive due to poor Ad Rank.
+ * Note: Content rank lost impression share is reported in the range of 0
+ * to 0.9. Any value above 0.9 is reported as 0.9001.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue content_rank_lost_impression_share = 22;
+ * @param \Google\Protobuf\DoubleValue $var
+ * @return $this
+ */
+ public function setContentRankLostImpressionShare($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\DoubleValue::class);
+ $this->content_rank_lost_impression_share = $var;
+
+ return $this;
+ }
+
+ /**
+ * Conversions divided by the number of ad interactions (such as clicks for
+ * text ads or views for video ads).
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue conversion_rate = 23;
+ * @return \Google\Protobuf\DoubleValue
+ */
+ public function getConversionRate()
+ {
+ return $this->conversion_rate;
+ }
+
+ /**
+ * Conversions divided by the number of ad interactions (such as clicks for
+ * text ads or views for video ads).
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue conversion_rate = 23;
+ * @param \Google\Protobuf\DoubleValue $var
+ * @return $this
+ */
+ public function setConversionRate($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\DoubleValue::class);
+ $this->conversion_rate = $var;
+
+ return $this;
+ }
+
+ /**
+ * The total value of conversions.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue conversion_value = 24;
+ * @return \Google\Protobuf\DoubleValue
+ */
+ public function getConversionValue()
+ {
+ return $this->conversion_value;
+ }
+
+ /**
+ * The total value of conversions.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue conversion_value = 24;
+ * @param \Google\Protobuf\DoubleValue $var
+ * @return $this
+ */
+ public function setConversionValue($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\DoubleValue::class);
+ $this->conversion_value = $var;
+
+ return $this;
+ }
+
+ /**
+ * The value of conversions divided by the cost of ad interactions.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue conversion_value_per_cost = 64;
+ * @return \Google\Protobuf\DoubleValue
+ */
+ public function getConversionValuePerCost()
+ {
+ return $this->conversion_value_per_cost;
+ }
+
+ /**
+ * The value of conversions divided by the cost of ad interactions.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue conversion_value_per_cost = 64;
+ * @param \Google\Protobuf\DoubleValue $var
+ * @return $this
+ */
+ public function setConversionValuePerCost($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\DoubleValue::class);
+ $this->conversion_value_per_cost = $var;
+
+ return $this;
+ }
+
+ /**
+ * The value of conversions divided by the number of ad interactions.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue conversion_value_per_interaction = 63;
+ * @return \Google\Protobuf\DoubleValue
+ */
+ public function getConversionValuePerInteraction()
+ {
+ return $this->conversion_value_per_interaction;
+ }
+
+ /**
+ * The value of conversions divided by the number of ad interactions.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue conversion_value_per_interaction = 63;
+ * @param \Google\Protobuf\DoubleValue $var
+ * @return $this
+ */
+ public function setConversionValuePerInteraction($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\DoubleValue::class);
+ $this->conversion_value_per_interaction = $var;
+
+ return $this;
+ }
+
+ /**
+ * The number of conversions. This only includes conversion actions which have
+ * "Include in Conversions" checked.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue conversions = 25;
+ * @return \Google\Protobuf\DoubleValue
+ */
+ public function getConversions()
+ {
+ return $this->conversions;
+ }
+
+ /**
+ * The number of conversions. This only includes conversion actions which have
+ * "Include in Conversions" checked.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue conversions = 25;
+ * @param \Google\Protobuf\DoubleValue $var
+ * @return $this
+ */
+ public function setConversions($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\DoubleValue::class);
+ $this->conversions = $var;
+
+ return $this;
+ }
+
+ /**
+ * The sum of your cost-per-click (CPC) and cost-per-thousand impressions
+ * (CPM) costs during this period.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value cost_micros = 26;
+ * @return \Google\Protobuf\Int64Value
+ */
+ public function getCostMicros()
+ {
+ return $this->cost_micros;
+ }
+
+ /**
+ * The sum of your cost-per-click (CPC) and cost-per-thousand impressions
+ * (CPM) costs during this period.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value cost_micros = 26;
+ * @param \Google\Protobuf\Int64Value $var
+ * @return $this
+ */
+ public function setCostMicros($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Int64Value::class);
+ $this->cost_micros = $var;
+
+ return $this;
+ }
+
+ /**
+ * The cost of ad interactions divided by all conversions.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue cost_per_all_conversion = 27;
+ * @return \Google\Protobuf\DoubleValue
+ */
+ public function getCostPerAllConversion()
+ {
+ return $this->cost_per_all_conversion;
+ }
+
+ /**
+ * The cost of ad interactions divided by all conversions.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue cost_per_all_conversion = 27;
+ * @param \Google\Protobuf\DoubleValue $var
+ * @return $this
+ */
+ public function setCostPerAllConversion($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\DoubleValue::class);
+ $this->cost_per_all_conversion = $var;
+
+ return $this;
+ }
+
+ /**
+ * The cost of ad interactions divided by conversions.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue cost_per_conversion = 28;
+ * @return \Google\Protobuf\DoubleValue
+ */
+ public function getCostPerConversion()
+ {
+ return $this->cost_per_conversion;
+ }
+
+ /**
+ * The cost of ad interactions divided by conversions.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue cost_per_conversion = 28;
+ * @param \Google\Protobuf\DoubleValue $var
+ * @return $this
+ */
+ public function setCostPerConversion($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\DoubleValue::class);
+ $this->cost_per_conversion = $var;
+
+ return $this;
+ }
+
+ /**
+ * Conversions from when a customer clicks on an AdWords ad on one device,
+ * then converts on a different device or browser.
+ * Cross-device conversions are already included in all_conversions.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue cross_device_conversions = 29;
+ * @return \Google\Protobuf\DoubleValue
+ */
+ public function getCrossDeviceConversions()
+ {
+ return $this->cross_device_conversions;
+ }
+
+ /**
+ * Conversions from when a customer clicks on an AdWords ad on one device,
+ * then converts on a different device or browser.
+ * Cross-device conversions are already included in all_conversions.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue cross_device_conversions = 29;
+ * @param \Google\Protobuf\DoubleValue $var
+ * @return $this
+ */
+ public function setCrossDeviceConversions($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\DoubleValue::class);
+ $this->cross_device_conversions = $var;
+
+ return $this;
+ }
+
+ /**
+ * The number of clicks your ad receives (Clicks) divided by the number
+ * of times your ad is shown (Impressions).
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue ctr = 30;
+ * @return \Google\Protobuf\DoubleValue
+ */
+ public function getCtr()
+ {
+ return $this->ctr;
+ }
+
+ /**
+ * The number of clicks your ad receives (Clicks) divided by the number
+ * of times your ad is shown (Impressions).
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue ctr = 30;
+ * @param \Google\Protobuf\DoubleValue $var
+ * @return $this
+ */
+ public function setCtr($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\DoubleValue::class);
+ $this->ctr = $var;
+
+ return $this;
+ }
+
+ /**
+ * How often people engage with your ad after it's shown to them. This is the
+ * number of ad expansions divided by the number of times your ad is shown.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue engagement_rate = 31;
+ * @return \Google\Protobuf\DoubleValue
+ */
+ public function getEngagementRate()
+ {
+ return $this->engagement_rate;
+ }
+
+ /**
+ * How often people engage with your ad after it's shown to them. This is the
+ * number of ad expansions divided by the number of times your ad is shown.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue engagement_rate = 31;
+ * @param \Google\Protobuf\DoubleValue $var
+ * @return $this
+ */
+ public function setEngagementRate($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\DoubleValue::class);
+ $this->engagement_rate = $var;
+
+ return $this;
+ }
+
+ /**
+ * The number of engagements.
+ * An engagement occurs when a viewer expands your Lightbox ad. Also, in the
+ * future, other ad types may support engagement metrics.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value engagements = 32;
+ * @return \Google\Protobuf\Int64Value
+ */
+ public function getEngagements()
+ {
+ return $this->engagements;
+ }
+
+ /**
+ * The number of engagements.
+ * An engagement occurs when a viewer expands your Lightbox ad. Also, in the
+ * future, other ad types may support engagement metrics.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value engagements = 32;
+ * @param \Google\Protobuf\Int64Value $var
+ * @return $this
+ */
+ public function setEngagements($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Int64Value::class);
+ $this->engagements = $var;
+
+ return $this;
+ }
+
+ /**
+ * Count of how often your ad has appeared on a search results page or
+ * website on the Google Network.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value impressions = 37;
+ * @return \Google\Protobuf\Int64Value
+ */
+ public function getImpressions()
+ {
+ return $this->impressions;
+ }
+
+ /**
+ * Count of how often your ad has appeared on a search results page or
+ * website on the Google Network.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value impressions = 37;
+ * @param \Google\Protobuf\Int64Value $var
+ * @return $this
+ */
+ public function setImpressions($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Int64Value::class);
+ $this->impressions = $var;
+
+ return $this;
+ }
+
+ /**
+ * How often people interact with your ad after it is shown to them.
+ * This is the number of interactions divided by the number of times your ad
+ * is shown.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue interaction_rate = 38;
+ * @return \Google\Protobuf\DoubleValue
+ */
+ public function getInteractionRate()
+ {
+ return $this->interaction_rate;
+ }
+
+ /**
+ * How often people interact with your ad after it is shown to them.
+ * This is the number of interactions divided by the number of times your ad
+ * is shown.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue interaction_rate = 38;
+ * @param \Google\Protobuf\DoubleValue $var
+ * @return $this
+ */
+ public function setInteractionRate($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\DoubleValue::class);
+ $this->interaction_rate = $var;
+
+ return $this;
+ }
+
+ /**
+ * The number of interactions.
+ * An interaction is the main user action associated with an ad format-clicks
+ * for text and shopping ads, views for video ads, and so on.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value interactions = 39;
+ * @return \Google\Protobuf\Int64Value
+ */
+ public function getInteractions()
+ {
+ return $this->interactions;
+ }
+
+ /**
+ * The number of interactions.
+ * An interaction is the main user action associated with an ad format-clicks
+ * for text and shopping ads, views for video ads, and so on.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value interactions = 39;
+ * @param \Google\Protobuf\Int64Value $var
+ * @return $this
+ */
+ public function setInteractions($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Int64Value::class);
+ $this->interactions = $var;
+
+ return $this;
+ }
+
+ /**
+ * The percentage of clicks filtered out of your total number of clicks
+ * (filtered + non-filtered clicks) during the reporting period.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue invalid_click_rate = 40;
+ * @return \Google\Protobuf\DoubleValue
+ */
+ public function getInvalidClickRate()
+ {
+ return $this->invalid_click_rate;
+ }
+
+ /**
+ * The percentage of clicks filtered out of your total number of clicks
+ * (filtered + non-filtered clicks) during the reporting period.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue invalid_click_rate = 40;
+ * @param \Google\Protobuf\DoubleValue $var
+ * @return $this
+ */
+ public function setInvalidClickRate($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\DoubleValue::class);
+ $this->invalid_click_rate = $var;
+
+ return $this;
+ }
+
+ /**
+ * Number of clicks Google considers illegitimate and doesn't charge you for.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value invalid_clicks = 41;
+ * @return \Google\Protobuf\Int64Value
+ */
+ public function getInvalidClicks()
+ {
+ return $this->invalid_clicks;
+ }
+
+ /**
+ * Number of clicks Google considers illegitimate and doesn't charge you for.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value invalid_clicks = 41;
+ * @param \Google\Protobuf\Int64Value $var
+ * @return $this
+ */
+ public function setInvalidClicks($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Int64Value::class);
+ $this->invalid_clicks = $var;
+
+ return $this;
+ }
+
+ /**
+ * Percentage of first-time sessions (from people who had never visited your
+ * site before). Imported from Google Analytics.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue percent_new_visitors = 42;
+ * @return \Google\Protobuf\DoubleValue
+ */
+ public function getPercentNewVisitors()
+ {
+ return $this->percent_new_visitors;
+ }
+
+ /**
+ * Percentage of first-time sessions (from people who had never visited your
+ * site before). Imported from Google Analytics.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue percent_new_visitors = 42;
+ * @param \Google\Protobuf\DoubleValue $var
+ * @return $this
+ */
+ public function setPercentNewVisitors($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\DoubleValue::class);
+ $this->percent_new_visitors = $var;
+
+ return $this;
+ }
+
+ /**
+ * Number of offline phone calls.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value phone_calls = 43;
+ * @return \Google\Protobuf\Int64Value
+ */
+ public function getPhoneCalls()
+ {
+ return $this->phone_calls;
+ }
+
+ /**
+ * Number of offline phone calls.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value phone_calls = 43;
+ * @param \Google\Protobuf\Int64Value $var
+ * @return $this
+ */
+ public function setPhoneCalls($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Int64Value::class);
+ $this->phone_calls = $var;
+
+ return $this;
+ }
+
+ /**
+ * Number of offline phone impressions.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value phone_impressions = 44;
+ * @return \Google\Protobuf\Int64Value
+ */
+ public function getPhoneImpressions()
+ {
+ return $this->phone_impressions;
+ }
+
+ /**
+ * Number of offline phone impressions.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value phone_impressions = 44;
+ * @param \Google\Protobuf\Int64Value $var
+ * @return $this
+ */
+ public function setPhoneImpressions($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Int64Value::class);
+ $this->phone_impressions = $var;
+
+ return $this;
+ }
+
+ /**
+ * Number of phone calls received (phone_calls) divided by the number of
+ * times your phone number is shown (phone_impressions).
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue phone_through_rate = 45;
+ * @return \Google\Protobuf\DoubleValue
+ */
+ public function getPhoneThroughRate()
+ {
+ return $this->phone_through_rate;
+ }
+
+ /**
+ * Number of phone calls received (phone_calls) divided by the number of
+ * times your phone number is shown (phone_impressions).
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue phone_through_rate = 45;
+ * @param \Google\Protobuf\DoubleValue $var
+ * @return $this
+ */
+ public function setPhoneThroughRate($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\DoubleValue::class);
+ $this->phone_through_rate = $var;
+
+ return $this;
+ }
+
+ /**
+ * Your clickthrough rate (Ctr) divided by the average clickthrough rate of
+ * all advertisers on the websites that show your ads. Measures how your ads
+ * perform on Display Network sites compared to other ads on the same sites.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue relative_ctr = 46;
+ * @return \Google\Protobuf\DoubleValue
+ */
+ public function getRelativeCtr()
+ {
+ return $this->relative_ctr;
+ }
+
+ /**
+ * Your clickthrough rate (Ctr) divided by the average clickthrough rate of
+ * all advertisers on the websites that show your ads. Measures how your ads
+ * perform on Display Network sites compared to other ads on the same sites.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue relative_ctr = 46;
+ * @param \Google\Protobuf\DoubleValue $var
+ * @return $this
+ */
+ public function setRelativeCtr($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\DoubleValue::class);
+ $this->relative_ctr = $var;
+
+ return $this;
+ }
+
+ /**
+ * The estimated percent of times that your ad was eligible to show on the
+ * Search Network but didn't because your budget was too low. Note: Search
+ * budget lost impression share is reported in the range of 0 to 0.9. Any
+ * value above 0.9 is reported as 0.9001.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue search_budget_lost_impression_share = 47;
+ * @return \Google\Protobuf\DoubleValue
+ */
+ public function getSearchBudgetLostImpressionShare()
+ {
+ return $this->search_budget_lost_impression_share;
+ }
+
+ /**
+ * The estimated percent of times that your ad was eligible to show on the
+ * Search Network but didn't because your budget was too low. Note: Search
+ * budget lost impression share is reported in the range of 0 to 0.9. Any
+ * value above 0.9 is reported as 0.9001.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue search_budget_lost_impression_share = 47;
+ * @param \Google\Protobuf\DoubleValue $var
+ * @return $this
+ */
+ public function setSearchBudgetLostImpressionShare($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\DoubleValue::class);
+ $this->search_budget_lost_impression_share = $var;
+
+ return $this;
+ }
+
+ /**
+ * The impressions you've received divided by the estimated number of
+ * impressions you were eligible to receive on the Search Network for search
+ * terms that matched your keywords exactly (or were close variants of your
+ * keyword), regardless of your keyword match types. Note: Search exact match
+ * impression share is reported in the range of 0.1 to 1. Any value below 0.1
+ * is reported as 0.0999.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue search_exact_match_impression_share = 49;
+ * @return \Google\Protobuf\DoubleValue
+ */
+ public function getSearchExactMatchImpressionShare()
+ {
+ return $this->search_exact_match_impression_share;
+ }
+
+ /**
+ * The impressions you've received divided by the estimated number of
+ * impressions you were eligible to receive on the Search Network for search
+ * terms that matched your keywords exactly (or were close variants of your
+ * keyword), regardless of your keyword match types. Note: Search exact match
+ * impression share is reported in the range of 0.1 to 1. Any value below 0.1
+ * is reported as 0.0999.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue search_exact_match_impression_share = 49;
+ * @param \Google\Protobuf\DoubleValue $var
+ * @return $this
+ */
+ public function setSearchExactMatchImpressionShare($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\DoubleValue::class);
+ $this->search_exact_match_impression_share = $var;
+
+ return $this;
+ }
+
+ /**
+ * The impressions you've received on the Search Network divided
+ * by the estimated number of impressions you were eligible to receive.
+ * Note: Search impression share is reported in the range of 0.1 to 1. Any
+ * value below 0.1 is reported as 0.0999.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue search_impression_share = 50;
+ * @return \Google\Protobuf\DoubleValue
+ */
+ public function getSearchImpressionShare()
+ {
+ return $this->search_impression_share;
+ }
+
+ /**
+ * The impressions you've received on the Search Network divided
+ * by the estimated number of impressions you were eligible to receive.
+ * Note: Search impression share is reported in the range of 0.1 to 1. Any
+ * value below 0.1 is reported as 0.0999.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue search_impression_share = 50;
+ * @param \Google\Protobuf\DoubleValue $var
+ * @return $this
+ */
+ public function setSearchImpressionShare($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\DoubleValue::class);
+ $this->search_impression_share = $var;
+
+ return $this;
+ }
+
+ /**
+ * The estimated percentage of impressions on the Search Network
+ * that your ads didn't receive due to poor Ad Rank.
+ * Note: Search rank lost impression share is reported in the range of 0 to
+ * 0.9. Any value above 0.9 is reported as 0.9001.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue search_rank_lost_impression_share = 51;
+ * @return \Google\Protobuf\DoubleValue
+ */
+ public function getSearchRankLostImpressionShare()
+ {
+ return $this->search_rank_lost_impression_share;
+ }
+
+ /**
+ * The estimated percentage of impressions on the Search Network
+ * that your ads didn't receive due to poor Ad Rank.
+ * Note: Search rank lost impression share is reported in the range of 0 to
+ * 0.9. Any value above 0.9 is reported as 0.9001.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue search_rank_lost_impression_share = 51;
+ * @param \Google\Protobuf\DoubleValue $var
+ * @return $this
+ */
+ public function setSearchRankLostImpressionShare($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\DoubleValue::class);
+ $this->search_rank_lost_impression_share = $var;
+
+ return $this;
+ }
+
+ /**
+ * The value of all conversions divided by the number of all conversions.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue value_per_all_conversions = 52;
+ * @return \Google\Protobuf\DoubleValue
+ */
+ public function getValuePerAllConversions()
+ {
+ return $this->value_per_all_conversions;
+ }
+
+ /**
+ * The value of all conversions divided by the number of all conversions.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue value_per_all_conversions = 52;
+ * @param \Google\Protobuf\DoubleValue $var
+ * @return $this
+ */
+ public function setValuePerAllConversions($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\DoubleValue::class);
+ $this->value_per_all_conversions = $var;
+
+ return $this;
+ }
+
+ /**
+ * The value of conversions divided by the number of conversions.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue value_per_conversion = 53;
+ * @return \Google\Protobuf\DoubleValue
+ */
+ public function getValuePerConversion()
+ {
+ return $this->value_per_conversion;
+ }
+
+ /**
+ * The value of conversions divided by the number of conversions.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue value_per_conversion = 53;
+ * @param \Google\Protobuf\DoubleValue $var
+ * @return $this
+ */
+ public function setValuePerConversion($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\DoubleValue::class);
+ $this->value_per_conversion = $var;
+
+ return $this;
+ }
+
+ /**
+ * The total number of view-through conversions.
+ * These happen when a customer sees an image or rich media ad, then later
+ * completes a conversion on your site without interacting with (e.g.,
+ * clicking on) another ad.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value view_through_conversions = 60;
+ * @return \Google\Protobuf\Int64Value
+ */
+ public function getViewThroughConversions()
+ {
+ return $this->view_through_conversions;
+ }
+
+ /**
+ * The total number of view-through conversions.
+ * These happen when a customer sees an image or rich media ad, then later
+ * completes a conversion on your site without interacting with (e.g.,
+ * clicking on) another ad.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value view_through_conversions = 60;
+ * @param \Google\Protobuf\Int64Value $var
+ * @return $this
+ */
+ public function setViewThroughConversions($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Int64Value::class);
+ $this->view_through_conversions = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Common/PageOnePromoted.php b/src/Google/Ads/GoogleAds/V0/Common/PageOnePromoted.php
new file mode 100644
index 000000000..bbd5e1a85
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Common/PageOnePromoted.php
@@ -0,0 +1,245 @@
+google.ads.googleads.v0.common.PageOnePromoted
+ */
+class PageOnePromoted extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The strategy goal of where impressions are desired to be shown on
+ * search result pages.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.PageOnePromotedStrategyGoalEnum.PageOnePromotedStrategyGoal strategy_goal = 1;
+ */
+ private $strategy_goal = 0;
+ /**
+ * Maximum bid limit that can be set by the bid strategy.
+ * The limit applies to all keywords managed by the strategy.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value cpc_bid_ceiling_micros = 2;
+ */
+ private $cpc_bid_ceiling_micros = null;
+ /**
+ * Bid multiplier to be applied to the relevant bid estimate (depending on
+ * the `strategy_goal`) in determining a keyword's new CPC bid.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue bid_modifier = 3;
+ */
+ private $bid_modifier = null;
+ /**
+ * Whether the strategy should always follow bid estimate changes, or only
+ * increase.
+ * If false, always sets a keyword's new bid to the current bid estimate.
+ * If true, only updates a keyword's bid if the current bid estimate is
+ * greater than the current bid.
+ *
+ * Generated from protobuf field .google.protobuf.BoolValue only_raise_cpc_bids = 4;
+ */
+ private $only_raise_cpc_bids = null;
+ /**
+ * Whether the strategy is allowed to raise bids when the throttling
+ * rate of the budget it is serving out of rises above a threshold.
+ *
+ * Generated from protobuf field .google.protobuf.BoolValue raise_cpc_bid_when_budget_constrained = 5;
+ */
+ private $raise_cpc_bid_when_budget_constrained = null;
+ /**
+ * Whether the strategy is allowed to raise bids on keywords with
+ * lower-range quality scores.
+ *
+ * Generated from protobuf field .google.protobuf.BoolValue raise_cpc_bid_when_quality_score_is_low = 6;
+ */
+ private $raise_cpc_bid_when_quality_score_is_low = null;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Common\Bidding::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * The strategy goal of where impressions are desired to be shown on
+ * search result pages.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.PageOnePromotedStrategyGoalEnum.PageOnePromotedStrategyGoal strategy_goal = 1;
+ * @return int
+ */
+ public function getStrategyGoal()
+ {
+ return $this->strategy_goal;
+ }
+
+ /**
+ * The strategy goal of where impressions are desired to be shown on
+ * search result pages.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.PageOnePromotedStrategyGoalEnum.PageOnePromotedStrategyGoal strategy_goal = 1;
+ * @param int $var
+ * @return $this
+ */
+ public function setStrategyGoal($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Enums\PageOnePromotedStrategyGoalEnum_PageOnePromotedStrategyGoal::class);
+ $this->strategy_goal = $var;
+
+ return $this;
+ }
+
+ /**
+ * Maximum bid limit that can be set by the bid strategy.
+ * The limit applies to all keywords managed by the strategy.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value cpc_bid_ceiling_micros = 2;
+ * @return \Google\Protobuf\Int64Value
+ */
+ public function getCpcBidCeilingMicros()
+ {
+ return $this->cpc_bid_ceiling_micros;
+ }
+
+ /**
+ * Maximum bid limit that can be set by the bid strategy.
+ * The limit applies to all keywords managed by the strategy.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value cpc_bid_ceiling_micros = 2;
+ * @param \Google\Protobuf\Int64Value $var
+ * @return $this
+ */
+ public function setCpcBidCeilingMicros($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Int64Value::class);
+ $this->cpc_bid_ceiling_micros = $var;
+
+ return $this;
+ }
+
+ /**
+ * Bid multiplier to be applied to the relevant bid estimate (depending on
+ * the `strategy_goal`) in determining a keyword's new CPC bid.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue bid_modifier = 3;
+ * @return \Google\Protobuf\DoubleValue
+ */
+ public function getBidModifier()
+ {
+ return $this->bid_modifier;
+ }
+
+ /**
+ * Bid multiplier to be applied to the relevant bid estimate (depending on
+ * the `strategy_goal`) in determining a keyword's new CPC bid.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue bid_modifier = 3;
+ * @param \Google\Protobuf\DoubleValue $var
+ * @return $this
+ */
+ public function setBidModifier($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\DoubleValue::class);
+ $this->bid_modifier = $var;
+
+ return $this;
+ }
+
+ /**
+ * Whether the strategy should always follow bid estimate changes, or only
+ * increase.
+ * If false, always sets a keyword's new bid to the current bid estimate.
+ * If true, only updates a keyword's bid if the current bid estimate is
+ * greater than the current bid.
+ *
+ * Generated from protobuf field .google.protobuf.BoolValue only_raise_cpc_bids = 4;
+ * @return \Google\Protobuf\BoolValue
+ */
+ public function getOnlyRaiseCpcBids()
+ {
+ return $this->only_raise_cpc_bids;
+ }
+
+ /**
+ * Whether the strategy should always follow bid estimate changes, or only
+ * increase.
+ * If false, always sets a keyword's new bid to the current bid estimate.
+ * If true, only updates a keyword's bid if the current bid estimate is
+ * greater than the current bid.
+ *
+ * Generated from protobuf field .google.protobuf.BoolValue only_raise_cpc_bids = 4;
+ * @param \Google\Protobuf\BoolValue $var
+ * @return $this
+ */
+ public function setOnlyRaiseCpcBids($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\BoolValue::class);
+ $this->only_raise_cpc_bids = $var;
+
+ return $this;
+ }
+
+ /**
+ * Whether the strategy is allowed to raise bids when the throttling
+ * rate of the budget it is serving out of rises above a threshold.
+ *
+ * Generated from protobuf field .google.protobuf.BoolValue raise_cpc_bid_when_budget_constrained = 5;
+ * @return \Google\Protobuf\BoolValue
+ */
+ public function getRaiseCpcBidWhenBudgetConstrained()
+ {
+ return $this->raise_cpc_bid_when_budget_constrained;
+ }
+
+ /**
+ * Whether the strategy is allowed to raise bids when the throttling
+ * rate of the budget it is serving out of rises above a threshold.
+ *
+ * Generated from protobuf field .google.protobuf.BoolValue raise_cpc_bid_when_budget_constrained = 5;
+ * @param \Google\Protobuf\BoolValue $var
+ * @return $this
+ */
+ public function setRaiseCpcBidWhenBudgetConstrained($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\BoolValue::class);
+ $this->raise_cpc_bid_when_budget_constrained = $var;
+
+ return $this;
+ }
+
+ /**
+ * Whether the strategy is allowed to raise bids on keywords with
+ * lower-range quality scores.
+ *
+ * Generated from protobuf field .google.protobuf.BoolValue raise_cpc_bid_when_quality_score_is_low = 6;
+ * @return \Google\Protobuf\BoolValue
+ */
+ public function getRaiseCpcBidWhenQualityScoreIsLow()
+ {
+ return $this->raise_cpc_bid_when_quality_score_is_low;
+ }
+
+ /**
+ * Whether the strategy is allowed to raise bids on keywords with
+ * lower-range quality scores.
+ *
+ * Generated from protobuf field .google.protobuf.BoolValue raise_cpc_bid_when_quality_score_is_low = 6;
+ * @param \Google\Protobuf\BoolValue $var
+ * @return $this
+ */
+ public function setRaiseCpcBidWhenQualityScoreIsLow($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\BoolValue::class);
+ $this->raise_cpc_bid_when_quality_score_is_low = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Common/PlatformInfo.php b/src/Google/Ads/GoogleAds/V0/Common/PlatformInfo.php
new file mode 100644
index 000000000..75c7c921e
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Common/PlatformInfo.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.common.PlatformInfo
+ */
+class PlatformInfo extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Common\Criteria::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Common/PolicyViolationKey.php b/src/Google/Ads/GoogleAds/V0/Common/PolicyViolationKey.php
new file mode 100644
index 000000000..83d86135b
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Common/PolicyViolationKey.php
@@ -0,0 +1,102 @@
+google.ads.googleads.v0.common.PolicyViolationKey
+ */
+class PolicyViolationKey extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * Unique ID of the violated policy.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue policy_name = 1;
+ */
+ private $policy_name = null;
+ /**
+ * The text that violates the policy if specified.
+ * Otherwise, refers to the policy in general
+ * (e.g., when requesting to be exempt from the whole policy).
+ * If not specified for criterion exemptions, the whole policy is implied.
+ * Must be specified for ad exemptions.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue violating_text = 2;
+ */
+ private $violating_text = null;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Common\Policy::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * Unique ID of the violated policy.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue policy_name = 1;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getPolicyName()
+ {
+ return $this->policy_name;
+ }
+
+ /**
+ * Unique ID of the violated policy.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue policy_name = 1;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setPolicyName($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->policy_name = $var;
+
+ return $this;
+ }
+
+ /**
+ * The text that violates the policy if specified.
+ * Otherwise, refers to the policy in general
+ * (e.g., when requesting to be exempt from the whole policy).
+ * If not specified for criterion exemptions, the whole policy is implied.
+ * Must be specified for ad exemptions.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue violating_text = 2;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getViolatingText()
+ {
+ return $this->violating_text;
+ }
+
+ /**
+ * The text that violates the policy if specified.
+ * Otherwise, refers to the policy in general
+ * (e.g., when requesting to be exempt from the whole policy).
+ * If not specified for criterion exemptions, the whole policy is implied.
+ * Must be specified for ad exemptions.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue violating_text = 2;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setViolatingText($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->violating_text = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Common/ResponsiveDisplayAdInfo.php b/src/Google/Ads/GoogleAds/V0/Common/ResponsiveDisplayAdInfo.php
new file mode 100644
index 000000000..a84feef15
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Common/ResponsiveDisplayAdInfo.php
@@ -0,0 +1,153 @@
+google.ads.googleads.v0.common.ResponsiveDisplayAdInfo
+ */
+class ResponsiveDisplayAdInfo extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The short version of the ad's headline.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue short_headline = 1;
+ */
+ private $short_headline = null;
+ /**
+ * The long version of the ad's headline.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue long_headline = 2;
+ */
+ private $long_headline = null;
+ /**
+ * The description of the ad.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue description = 3;
+ */
+ private $description = null;
+ /**
+ * The business name in the ad.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue business_name = 4;
+ */
+ private $business_name = null;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Common\Ad::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * The short version of the ad's headline.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue short_headline = 1;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getShortHeadline()
+ {
+ return $this->short_headline;
+ }
+
+ /**
+ * The short version of the ad's headline.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue short_headline = 1;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setShortHeadline($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->short_headline = $var;
+
+ return $this;
+ }
+
+ /**
+ * The long version of the ad's headline.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue long_headline = 2;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getLongHeadline()
+ {
+ return $this->long_headline;
+ }
+
+ /**
+ * The long version of the ad's headline.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue long_headline = 2;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setLongHeadline($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->long_headline = $var;
+
+ return $this;
+ }
+
+ /**
+ * The description of the ad.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue description = 3;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getDescription()
+ {
+ return $this->description;
+ }
+
+ /**
+ * The description of the ad.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue description = 3;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setDescription($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->description = $var;
+
+ return $this;
+ }
+
+ /**
+ * The business name in the ad.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue business_name = 4;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getBusinessName()
+ {
+ return $this->business_name;
+ }
+
+ /**
+ * The business name in the ad.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue business_name = 4;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setBusinessName($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->business_name = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Common/TargetCpa.php b/src/Google/Ads/GoogleAds/V0/Common/TargetCpa.php
new file mode 100644
index 000000000..0a2ac8832
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Common/TargetCpa.php
@@ -0,0 +1,134 @@
+google.ads.googleads.v0.common.TargetCpa
+ */
+class TargetCpa extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * Average CPA target.
+ * This target should be greater than or equal to minimum billable unit based
+ * on the currency for the account.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value target_cpa_micros = 1;
+ */
+ private $target_cpa_micros = null;
+ /**
+ * Maximum bid limit that can be set by the bid strategy.
+ * The limit applies to all keywords managed by the strategy.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value cpc_bid_ceiling_micros = 2;
+ */
+ private $cpc_bid_ceiling_micros = null;
+ /**
+ * Minimum bid limit that can be set by the bid strategy.
+ * The limit applies to all keywords managed by the strategy.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value cpc_bid_floor_micros = 3;
+ */
+ private $cpc_bid_floor_micros = null;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Common\Bidding::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * Average CPA target.
+ * This target should be greater than or equal to minimum billable unit based
+ * on the currency for the account.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value target_cpa_micros = 1;
+ * @return \Google\Protobuf\Int64Value
+ */
+ public function getTargetCpaMicros()
+ {
+ return $this->target_cpa_micros;
+ }
+
+ /**
+ * Average CPA target.
+ * This target should be greater than or equal to minimum billable unit based
+ * on the currency for the account.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value target_cpa_micros = 1;
+ * @param \Google\Protobuf\Int64Value $var
+ * @return $this
+ */
+ public function setTargetCpaMicros($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Int64Value::class);
+ $this->target_cpa_micros = $var;
+
+ return $this;
+ }
+
+ /**
+ * Maximum bid limit that can be set by the bid strategy.
+ * The limit applies to all keywords managed by the strategy.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value cpc_bid_ceiling_micros = 2;
+ * @return \Google\Protobuf\Int64Value
+ */
+ public function getCpcBidCeilingMicros()
+ {
+ return $this->cpc_bid_ceiling_micros;
+ }
+
+ /**
+ * Maximum bid limit that can be set by the bid strategy.
+ * The limit applies to all keywords managed by the strategy.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value cpc_bid_ceiling_micros = 2;
+ * @param \Google\Protobuf\Int64Value $var
+ * @return $this
+ */
+ public function setCpcBidCeilingMicros($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Int64Value::class);
+ $this->cpc_bid_ceiling_micros = $var;
+
+ return $this;
+ }
+
+ /**
+ * Minimum bid limit that can be set by the bid strategy.
+ * The limit applies to all keywords managed by the strategy.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value cpc_bid_floor_micros = 3;
+ * @return \Google\Protobuf\Int64Value
+ */
+ public function getCpcBidFloorMicros()
+ {
+ return $this->cpc_bid_floor_micros;
+ }
+
+ /**
+ * Minimum bid limit that can be set by the bid strategy.
+ * The limit applies to all keywords managed by the strategy.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value cpc_bid_floor_micros = 3;
+ * @param \Google\Protobuf\Int64Value $var
+ * @return $this
+ */
+ public function setCpcBidFloorMicros($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Int64Value::class);
+ $this->cpc_bid_floor_micros = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Common/TargetOutrankShare.php b/src/Google/Ads/GoogleAds/V0/Common/TargetOutrankShare.php
new file mode 100644
index 000000000..d4a829b40
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Common/TargetOutrankShare.php
@@ -0,0 +1,219 @@
+google.ads.googleads.v0.common.TargetOutrankShare
+ */
+class TargetOutrankShare extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The target fraction of auctions where the advertiser should outrank the
+ * competitor.
+ * The advertiser outranks the competitor in an auction if either the
+ * advertiser appears above the competitor in the search results, or appears
+ * in the search results when the competitor does not.
+ * Value must be between 1 and 1000000, inclusive.
+ *
+ * Generated from protobuf field .google.protobuf.Int32Value target_outrank_share_micros = 1;
+ */
+ private $target_outrank_share_micros = null;
+ /**
+ * Competitor's visible domain URL.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue competitor_domain = 2;
+ */
+ private $competitor_domain = null;
+ /**
+ * Maximum bid limit that can be set by the bid strategy.
+ * The limit applies to all keywords managed by the strategy.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value cpc_bid_ceiling_micros = 3;
+ */
+ private $cpc_bid_ceiling_micros = null;
+ /**
+ * Whether the strategy should always follow bid estimate changes,
+ * or only increase.
+ * If false, always set a keyword's new bid to the current bid estimate.
+ * If true, only updates a keyword's bid if the current bid estimate is
+ * greater than the current bid.
+ *
+ * Generated from protobuf field .google.protobuf.BoolValue only_raise_cpc_bids = 4;
+ */
+ private $only_raise_cpc_bids = null;
+ /**
+ * Whether the strategy is allowed to raise bids on keywords with
+ * lower-range quality scores.
+ *
+ * Generated from protobuf field .google.protobuf.BoolValue raise_cpc_bid_when_quality_score_is_low = 5;
+ */
+ private $raise_cpc_bid_when_quality_score_is_low = null;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Common\Bidding::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * The target fraction of auctions where the advertiser should outrank the
+ * competitor.
+ * The advertiser outranks the competitor in an auction if either the
+ * advertiser appears above the competitor in the search results, or appears
+ * in the search results when the competitor does not.
+ * Value must be between 1 and 1000000, inclusive.
+ *
+ * Generated from protobuf field .google.protobuf.Int32Value target_outrank_share_micros = 1;
+ * @return \Google\Protobuf\Int32Value
+ */
+ public function getTargetOutrankShareMicros()
+ {
+ return $this->target_outrank_share_micros;
+ }
+
+ /**
+ * The target fraction of auctions where the advertiser should outrank the
+ * competitor.
+ * The advertiser outranks the competitor in an auction if either the
+ * advertiser appears above the competitor in the search results, or appears
+ * in the search results when the competitor does not.
+ * Value must be between 1 and 1000000, inclusive.
+ *
+ * Generated from protobuf field .google.protobuf.Int32Value target_outrank_share_micros = 1;
+ * @param \Google\Protobuf\Int32Value $var
+ * @return $this
+ */
+ public function setTargetOutrankShareMicros($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Int32Value::class);
+ $this->target_outrank_share_micros = $var;
+
+ return $this;
+ }
+
+ /**
+ * Competitor's visible domain URL.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue competitor_domain = 2;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getCompetitorDomain()
+ {
+ return $this->competitor_domain;
+ }
+
+ /**
+ * Competitor's visible domain URL.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue competitor_domain = 2;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setCompetitorDomain($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->competitor_domain = $var;
+
+ return $this;
+ }
+
+ /**
+ * Maximum bid limit that can be set by the bid strategy.
+ * The limit applies to all keywords managed by the strategy.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value cpc_bid_ceiling_micros = 3;
+ * @return \Google\Protobuf\Int64Value
+ */
+ public function getCpcBidCeilingMicros()
+ {
+ return $this->cpc_bid_ceiling_micros;
+ }
+
+ /**
+ * Maximum bid limit that can be set by the bid strategy.
+ * The limit applies to all keywords managed by the strategy.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value cpc_bid_ceiling_micros = 3;
+ * @param \Google\Protobuf\Int64Value $var
+ * @return $this
+ */
+ public function setCpcBidCeilingMicros($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Int64Value::class);
+ $this->cpc_bid_ceiling_micros = $var;
+
+ return $this;
+ }
+
+ /**
+ * Whether the strategy should always follow bid estimate changes,
+ * or only increase.
+ * If false, always set a keyword's new bid to the current bid estimate.
+ * If true, only updates a keyword's bid if the current bid estimate is
+ * greater than the current bid.
+ *
+ * Generated from protobuf field .google.protobuf.BoolValue only_raise_cpc_bids = 4;
+ * @return \Google\Protobuf\BoolValue
+ */
+ public function getOnlyRaiseCpcBids()
+ {
+ return $this->only_raise_cpc_bids;
+ }
+
+ /**
+ * Whether the strategy should always follow bid estimate changes,
+ * or only increase.
+ * If false, always set a keyword's new bid to the current bid estimate.
+ * If true, only updates a keyword's bid if the current bid estimate is
+ * greater than the current bid.
+ *
+ * Generated from protobuf field .google.protobuf.BoolValue only_raise_cpc_bids = 4;
+ * @param \Google\Protobuf\BoolValue $var
+ * @return $this
+ */
+ public function setOnlyRaiseCpcBids($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\BoolValue::class);
+ $this->only_raise_cpc_bids = $var;
+
+ return $this;
+ }
+
+ /**
+ * Whether the strategy is allowed to raise bids on keywords with
+ * lower-range quality scores.
+ *
+ * Generated from protobuf field .google.protobuf.BoolValue raise_cpc_bid_when_quality_score_is_low = 5;
+ * @return \Google\Protobuf\BoolValue
+ */
+ public function getRaiseCpcBidWhenQualityScoreIsLow()
+ {
+ return $this->raise_cpc_bid_when_quality_score_is_low;
+ }
+
+ /**
+ * Whether the strategy is allowed to raise bids on keywords with
+ * lower-range quality scores.
+ *
+ * Generated from protobuf field .google.protobuf.BoolValue raise_cpc_bid_when_quality_score_is_low = 5;
+ * @param \Google\Protobuf\BoolValue $var
+ * @return $this
+ */
+ public function setRaiseCpcBidWhenQualityScoreIsLow($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\BoolValue::class);
+ $this->raise_cpc_bid_when_quality_score_is_low = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Common/TargetRoas.php b/src/Google/Ads/GoogleAds/V0/Common/TargetRoas.php
new file mode 100644
index 000000000..9310d218b
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Common/TargetRoas.php
@@ -0,0 +1,131 @@
+google.ads.googleads.v0.common.TargetRoas
+ */
+class TargetRoas extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * Required. The desired revenue (based on conversion data) per unit of spend.
+ * Value must be between 0.01 and 1000.0, inclusive.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue target_roas = 1;
+ */
+ private $target_roas = null;
+ /**
+ * Maximum bid limit that can be set by the bid strategy.
+ * The limit applies to all keywords managed by the strategy.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value cpc_bid_ceiling_micros = 2;
+ */
+ private $cpc_bid_ceiling_micros = null;
+ /**
+ * Minimum bid limit that can be set by the bid strategy.
+ * The limit applies to all keywords managed by the strategy.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value cpc_bid_floor_micros = 3;
+ */
+ private $cpc_bid_floor_micros = null;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Common\Bidding::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * Required. The desired revenue (based on conversion data) per unit of spend.
+ * Value must be between 0.01 and 1000.0, inclusive.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue target_roas = 1;
+ * @return \Google\Protobuf\DoubleValue
+ */
+ public function getTargetRoas()
+ {
+ return $this->target_roas;
+ }
+
+ /**
+ * Required. The desired revenue (based on conversion data) per unit of spend.
+ * Value must be between 0.01 and 1000.0, inclusive.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue target_roas = 1;
+ * @param \Google\Protobuf\DoubleValue $var
+ * @return $this
+ */
+ public function setTargetRoas($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\DoubleValue::class);
+ $this->target_roas = $var;
+
+ return $this;
+ }
+
+ /**
+ * Maximum bid limit that can be set by the bid strategy.
+ * The limit applies to all keywords managed by the strategy.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value cpc_bid_ceiling_micros = 2;
+ * @return \Google\Protobuf\Int64Value
+ */
+ public function getCpcBidCeilingMicros()
+ {
+ return $this->cpc_bid_ceiling_micros;
+ }
+
+ /**
+ * Maximum bid limit that can be set by the bid strategy.
+ * The limit applies to all keywords managed by the strategy.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value cpc_bid_ceiling_micros = 2;
+ * @param \Google\Protobuf\Int64Value $var
+ * @return $this
+ */
+ public function setCpcBidCeilingMicros($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Int64Value::class);
+ $this->cpc_bid_ceiling_micros = $var;
+
+ return $this;
+ }
+
+ /**
+ * Minimum bid limit that can be set by the bid strategy.
+ * The limit applies to all keywords managed by the strategy.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value cpc_bid_floor_micros = 3;
+ * @return \Google\Protobuf\Int64Value
+ */
+ public function getCpcBidFloorMicros()
+ {
+ return $this->cpc_bid_floor_micros;
+ }
+
+ /**
+ * Minimum bid limit that can be set by the bid strategy.
+ * The limit applies to all keywords managed by the strategy.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value cpc_bid_floor_micros = 3;
+ * @param \Google\Protobuf\Int64Value $var
+ * @return $this
+ */
+ public function setCpcBidFloorMicros($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Int64Value::class);
+ $this->cpc_bid_floor_micros = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Common/TargetSpend.php b/src/Google/Ads/GoogleAds/V0/Common/TargetSpend.php
new file mode 100644
index 000000000..e53182b0d
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Common/TargetSpend.php
@@ -0,0 +1,102 @@
+google.ads.googleads.v0.common.TargetSpend
+ */
+class TargetSpend extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The spend target under which to maximize clicks.
+ * A TargetSpend bidder will attempt to spend the smaller of this value
+ * or the natural throttling spend amount.
+ * If not specified, the budget is used as the spend target.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value target_spend_micros = 1;
+ */
+ private $target_spend_micros = null;
+ /**
+ * Maximum bid limit that can be set by the bid strategy.
+ * The limit applies to all keywords managed by the strategy.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value cpc_bid_ceiling_micros = 2;
+ */
+ private $cpc_bid_ceiling_micros = null;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Common\Bidding::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * The spend target under which to maximize clicks.
+ * A TargetSpend bidder will attempt to spend the smaller of this value
+ * or the natural throttling spend amount.
+ * If not specified, the budget is used as the spend target.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value target_spend_micros = 1;
+ * @return \Google\Protobuf\Int64Value
+ */
+ public function getTargetSpendMicros()
+ {
+ return $this->target_spend_micros;
+ }
+
+ /**
+ * The spend target under which to maximize clicks.
+ * A TargetSpend bidder will attempt to spend the smaller of this value
+ * or the natural throttling spend amount.
+ * If not specified, the budget is used as the spend target.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value target_spend_micros = 1;
+ * @param \Google\Protobuf\Int64Value $var
+ * @return $this
+ */
+ public function setTargetSpendMicros($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Int64Value::class);
+ $this->target_spend_micros = $var;
+
+ return $this;
+ }
+
+ /**
+ * Maximum bid limit that can be set by the bid strategy.
+ * The limit applies to all keywords managed by the strategy.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value cpc_bid_ceiling_micros = 2;
+ * @return \Google\Protobuf\Int64Value
+ */
+ public function getCpcBidCeilingMicros()
+ {
+ return $this->cpc_bid_ceiling_micros;
+ }
+
+ /**
+ * Maximum bid limit that can be set by the bid strategy.
+ * The limit applies to all keywords managed by the strategy.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value cpc_bid_ceiling_micros = 2;
+ * @param \Google\Protobuf\Int64Value $var
+ * @return $this
+ */
+ public function setCpcBidCeilingMicros($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Int64Value::class);
+ $this->cpc_bid_ceiling_micros = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Common/TextAdInfo.php b/src/Google/Ads/GoogleAds/V0/Common/TextAdInfo.php
new file mode 100644
index 000000000..5cc025590
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Common/TextAdInfo.php
@@ -0,0 +1,121 @@
+google.ads.googleads.v0.common.TextAdInfo
+ */
+class TextAdInfo extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The headline of the ad.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue headline = 1;
+ */
+ private $headline = null;
+ /**
+ * The first line of the ad's description.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue description1 = 2;
+ */
+ private $description1 = null;
+ /**
+ * The second line of the ad's description.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue description2 = 3;
+ */
+ private $description2 = null;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Common\Ad::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * The headline of the ad.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue headline = 1;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getHeadline()
+ {
+ return $this->headline;
+ }
+
+ /**
+ * The headline of the ad.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue headline = 1;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setHeadline($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->headline = $var;
+
+ return $this;
+ }
+
+ /**
+ * The first line of the ad's description.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue description1 = 2;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getDescription1()
+ {
+ return $this->description1;
+ }
+
+ /**
+ * The first line of the ad's description.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue description1 = 2;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setDescription1($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->description1 = $var;
+
+ return $this;
+ }
+
+ /**
+ * The second line of the ad's description.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue description2 = 3;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getDescription2()
+ {
+ return $this->description2;
+ }
+
+ /**
+ * The second line of the ad's description.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue description2 = 3;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setDescription2($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->description2 = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Common/Value.php b/src/Google/Ads/GoogleAds/V0/Common/Value.php
new file mode 100644
index 000000000..96b612cf1
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Common/Value.php
@@ -0,0 +1,164 @@
+google.ads.googleads.v0.common.Value
+ */
+class Value extends \Google\Protobuf\Internal\Message
+{
+ protected $value;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Common\Value::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * A boolean.
+ *
+ * Generated from protobuf field bool boolean_value = 1;
+ * @return bool
+ */
+ public function getBooleanValue()
+ {
+ return $this->readOneof(1);
+ }
+
+ /**
+ * A boolean.
+ *
+ * Generated from protobuf field bool boolean_value = 1;
+ * @param bool $var
+ * @return $this
+ */
+ public function setBooleanValue($var)
+ {
+ GPBUtil::checkBool($var);
+ $this->writeOneof(1, $var);
+
+ return $this;
+ }
+
+ /**
+ * An int64.
+ *
+ * Generated from protobuf field int64 int64_value = 2;
+ * @return int|string
+ */
+ public function getInt64Value()
+ {
+ return $this->readOneof(2);
+ }
+
+ /**
+ * An int64.
+ *
+ * Generated from protobuf field int64 int64_value = 2;
+ * @param int|string $var
+ * @return $this
+ */
+ public function setInt64Value($var)
+ {
+ GPBUtil::checkInt64($var);
+ $this->writeOneof(2, $var);
+
+ return $this;
+ }
+
+ /**
+ * A float.
+ *
+ * Generated from protobuf field float float_value = 3;
+ * @return float
+ */
+ public function getFloatValue()
+ {
+ return $this->readOneof(3);
+ }
+
+ /**
+ * A float.
+ *
+ * Generated from protobuf field float float_value = 3;
+ * @param float $var
+ * @return $this
+ */
+ public function setFloatValue($var)
+ {
+ GPBUtil::checkFloat($var);
+ $this->writeOneof(3, $var);
+
+ return $this;
+ }
+
+ /**
+ * A double.
+ *
+ * Generated from protobuf field double double_value = 4;
+ * @return float
+ */
+ public function getDoubleValue()
+ {
+ return $this->readOneof(4);
+ }
+
+ /**
+ * A double.
+ *
+ * Generated from protobuf field double double_value = 4;
+ * @param float $var
+ * @return $this
+ */
+ public function setDoubleValue($var)
+ {
+ GPBUtil::checkDouble($var);
+ $this->writeOneof(4, $var);
+
+ return $this;
+ }
+
+ /**
+ * A string.
+ *
+ * Generated from protobuf field string string_value = 5;
+ * @return string
+ */
+ public function getStringValue()
+ {
+ return $this->readOneof(5);
+ }
+
+ /**
+ * A string.
+ *
+ * Generated from protobuf field string string_value = 5;
+ * @param string $var
+ * @return $this
+ */
+ public function setStringValue($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->writeOneof(5, $var);
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getValue()
+ {
+ return $this->whichOneof("value");
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Enums/AdGroupAdStatusEnum.php b/src/Google/Ads/GoogleAds/V0/Enums/AdGroupAdStatusEnum.php
new file mode 100644
index 000000000..7231856d7
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Enums/AdGroupAdStatusEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.enums.AdGroupAdStatusEnum
+ */
+class AdGroupAdStatusEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Enums\AdGroupAdStatus::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Enums/AdGroupAdStatusEnum_AdGroupAdStatus.php b/src/Google/Ads/GoogleAds/V0/Enums/AdGroupAdStatusEnum_AdGroupAdStatus.php
new file mode 100644
index 000000000..c311408d1
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Enums/AdGroupAdStatusEnum_AdGroupAdStatus.php
@@ -0,0 +1,46 @@
+Google\Ads\Googleads\V0\Enums\AdGroupAdStatusEnum\AdGroupAdStatus
+ */
+class AdGroupAdStatusEnum_AdGroupAdStatus
+{
+ /**
+ * No value has been specified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * The received value is not known in this version.
+ * This is a response-only value.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * The ad group ad is enabled.
+ *
+ * Generated from protobuf enum ENABLED = 2;
+ */
+ const ENABLED = 2;
+ /**
+ * The ad group ad is paused.
+ *
+ * Generated from protobuf enum PAUSED = 3;
+ */
+ const PAUSED = 3;
+ /**
+ * The ad group ad is removed.
+ *
+ * Generated from protobuf enum REMOVED = 4;
+ */
+ const REMOVED = 4;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Enums/AdGroupCriterionStatusEnum.php b/src/Google/Ads/GoogleAds/V0/Enums/AdGroupCriterionStatusEnum.php
new file mode 100644
index 000000000..8b9f868e1
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Enums/AdGroupCriterionStatusEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.enums.AdGroupCriterionStatusEnum
+ */
+class AdGroupCriterionStatusEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Enums\AdGroupCriterionStatus::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Enums/AdGroupCriterionStatusEnum_AdGroupCriterionStatus.php b/src/Google/Ads/GoogleAds/V0/Enums/AdGroupCriterionStatusEnum_AdGroupCriterionStatus.php
new file mode 100644
index 000000000..d3d87eb86
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Enums/AdGroupCriterionStatusEnum_AdGroupCriterionStatus.php
@@ -0,0 +1,46 @@
+Google\Ads\Googleads\V0\Enums\AdGroupCriterionStatusEnum\AdGroupCriterionStatus
+ */
+class AdGroupCriterionStatusEnum_AdGroupCriterionStatus
+{
+ /**
+ * No value has been specified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * The received value is not known in this version.
+ * This is a response-only value.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * The ad group criterion is enabled.
+ *
+ * Generated from protobuf enum ENABLED = 2;
+ */
+ const ENABLED = 2;
+ /**
+ * The ad group criterion is paused.
+ *
+ * Generated from protobuf enum PAUSED = 3;
+ */
+ const PAUSED = 3;
+ /**
+ * The ad group criterion is removed.
+ *
+ * Generated from protobuf enum REMOVED = 4;
+ */
+ const REMOVED = 4;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Enums/AdGroupStatusEnum.php b/src/Google/Ads/GoogleAds/V0/Enums/AdGroupStatusEnum.php
new file mode 100644
index 000000000..f74aea481
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Enums/AdGroupStatusEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.enums.AdGroupStatusEnum
+ */
+class AdGroupStatusEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Enums\AdGroupStatus::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Enums/AdGroupStatusEnum_AdGroupStatus.php b/src/Google/Ads/GoogleAds/V0/Enums/AdGroupStatusEnum_AdGroupStatus.php
new file mode 100644
index 000000000..b23232342
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Enums/AdGroupStatusEnum_AdGroupStatus.php
@@ -0,0 +1,46 @@
+Google\Ads\Googleads\V0\Enums\AdGroupStatusEnum\AdGroupStatus
+ */
+class AdGroupStatusEnum_AdGroupStatus
+{
+ /**
+ * The status has not been specified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * The received value is not known in this version.
+ * This is a response-only value.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * The ad group is enabled.
+ *
+ * Generated from protobuf enum ENABLED = 2;
+ */
+ const ENABLED = 2;
+ /**
+ * The ad group is paused.
+ *
+ * Generated from protobuf enum PAUSED = 3;
+ */
+ const PAUSED = 3;
+ /**
+ * The ad group is removed.
+ *
+ * Generated from protobuf enum REMOVED = 4;
+ */
+ const REMOVED = 4;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Enums/AdGroupTypeEnum.php b/src/Google/Ads/GoogleAds/V0/Enums/AdGroupTypeEnum.php
new file mode 100644
index 000000000..fd4a7f3de
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Enums/AdGroupTypeEnum.php
@@ -0,0 +1,27 @@
+google.ads.googleads.v0.enums.AdGroupTypeEnum
+ */
+class AdGroupTypeEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Enums\AdGroupType::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Enums/AdGroupTypeEnum_AdGroupType.php b/src/Google/Ads/GoogleAds/V0/Enums/AdGroupTypeEnum_AdGroupType.php
new file mode 100644
index 000000000..10bd6dc63
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Enums/AdGroupTypeEnum_AdGroupType.php
@@ -0,0 +1,40 @@
+Google\Ads\Googleads\V0\Enums\AdGroupTypeEnum\AdGroupType
+ */
+class AdGroupTypeEnum_AdGroupType
+{
+ /**
+ * The type has not been specified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * The received value is not known in this version.
+ * This is a response-only value.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * The default ad group type for Search campaigns.
+ *
+ * Generated from protobuf enum SEARCH_STANDARD = 2;
+ */
+ const SEARCH_STANDARD = 2;
+ /**
+ * The default ad group type for Hotel campaigns.
+ *
+ * Generated from protobuf enum HOTEL_ADS = 6;
+ */
+ const HOTEL_ADS = 6;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Enums/AdNetworkTypeEnum.php b/src/Google/Ads/GoogleAds/V0/Enums/AdNetworkTypeEnum.php
new file mode 100644
index 000000000..620c83c90
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Enums/AdNetworkTypeEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.enums.AdNetworkTypeEnum
+ */
+class AdNetworkTypeEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Enums\AdNetworkType::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Enums/AdNetworkTypeEnum_AdNetworkType.php b/src/Google/Ads/GoogleAds/V0/Enums/AdNetworkTypeEnum_AdNetworkType.php
new file mode 100644
index 000000000..6e2c9db57
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Enums/AdNetworkTypeEnum_AdNetworkType.php
@@ -0,0 +1,57 @@
+Google\Ads\Googleads\V0\Enums\AdNetworkTypeEnum\AdNetworkType
+ */
+class AdNetworkTypeEnum_AdNetworkType
+{
+ /**
+ * Not specified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * The value is unknown in this version.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * Google search.
+ *
+ * Generated from protobuf enum SEARCH = 2;
+ */
+ const SEARCH = 2;
+ /**
+ * Search partners.
+ *
+ * Generated from protobuf enum SEARCH_PARTNERS = 3;
+ */
+ const SEARCH_PARTNERS = 3;
+ /**
+ * Display Network.
+ *
+ * Generated from protobuf enum CONTENT = 4;
+ */
+ const CONTENT = 4;
+ /**
+ * YouTube Search.
+ *
+ * Generated from protobuf enum YOUTUBE_SEARCH = 5;
+ */
+ const YOUTUBE_SEARCH = 5;
+ /**
+ * YouTube Videos
+ *
+ * Generated from protobuf enum YOUTUBE_WATCH = 6;
+ */
+ const YOUTUBE_WATCH = 6;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Enums/AdServingOptimizationStatusEnum.php b/src/Google/Ads/GoogleAds/V0/Enums/AdServingOptimizationStatusEnum.php
new file mode 100644
index 000000000..a90f480a6
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Enums/AdServingOptimizationStatusEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.enums.AdServingOptimizationStatusEnum
+ */
+class AdServingOptimizationStatusEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Enums\AdServingOptimizationStatus::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Enums/AdServingOptimizationStatusEnum_AdServingOptimizationStatus.php b/src/Google/Ads/GoogleAds/V0/Enums/AdServingOptimizationStatusEnum_AdServingOptimizationStatus.php
new file mode 100644
index 000000000..5c06c54eb
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Enums/AdServingOptimizationStatusEnum_AdServingOptimizationStatus.php
@@ -0,0 +1,61 @@
+Google\Ads\Googleads\V0\Enums\AdServingOptimizationStatusEnum\AdServingOptimizationStatus
+ */
+class AdServingOptimizationStatusEnum_AdServingOptimizationStatus
+{
+ /**
+ * No value has been specified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * The received value is not known in this version.
+ * This is a response-only value.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * Ad serving is optimized based on CTR for the campaign.
+ *
+ * Generated from protobuf enum OPTIMIZE = 2;
+ */
+ const OPTIMIZE = 2;
+ /**
+ * Ad serving is optimized based on CTR * Conversion for the campaign. If
+ * the campaign is not in the conversion optimizer bidding strategy, it will
+ * default to OPTIMIZED.
+ *
+ * Generated from protobuf enum CONVERSION_OPTIMIZE = 3;
+ */
+ const CONVERSION_OPTIMIZE = 3;
+ /**
+ * Ads are rotated evenly for 90 days, then optimized for clicks.
+ *
+ * Generated from protobuf enum ROTATE = 4;
+ */
+ const ROTATE = 4;
+ /**
+ * Show lower performing ads more evenly with higher performing ads, and do
+ * not optimize.
+ *
+ * Generated from protobuf enum ROTATE_INDEFINITELY = 5;
+ */
+ const ROTATE_INDEFINITELY = 5;
+ /**
+ * Ad serving optimization status is not available.
+ *
+ * Generated from protobuf enum UNAVAILABLE = 6;
+ */
+ const UNAVAILABLE = 6;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Enums/AdTypeEnum.php b/src/Google/Ads/GoogleAds/V0/Enums/AdTypeEnum.php
new file mode 100644
index 000000000..fac619f1e
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Enums/AdTypeEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.enums.AdTypeEnum
+ */
+class AdTypeEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Enums\AdType::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Enums/AdTypeEnum_AdType.php b/src/Google/Ads/GoogleAds/V0/Enums/AdTypeEnum_AdType.php
new file mode 100644
index 000000000..3a7993836
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Enums/AdTypeEnum_AdType.php
@@ -0,0 +1,70 @@
+Google\Ads\Googleads\V0\Enums\AdTypeEnum\AdType
+ */
+class AdTypeEnum_AdType
+{
+ /**
+ * No value has been specified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * The received value is not known in this version.
+ * This is a response-only value.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * The ad is a text ad.
+ *
+ * Generated from protobuf enum TEXT_AD = 2;
+ */
+ const TEXT_AD = 2;
+ /**
+ * The ad is an expanded text ad.
+ *
+ * Generated from protobuf enum EXPANDED_TEXT_AD = 3;
+ */
+ const EXPANDED_TEXT_AD = 3;
+ /**
+ * The ad is a dynamic search ad.
+ *
+ * Generated from protobuf enum DYNAMIC_SEARCH_AD = 4;
+ */
+ const DYNAMIC_SEARCH_AD = 4;
+ /**
+ * The ad is a responsive display ad.
+ *
+ * Generated from protobuf enum RESPONSIVE_DISPLAY_AD = 5;
+ */
+ const RESPONSIVE_DISPLAY_AD = 5;
+ /**
+ * The ad is a call only ad.
+ *
+ * Generated from protobuf enum CALL_ONLY_AD = 6;
+ */
+ const CALL_ONLY_AD = 6;
+ /**
+ * The ad is an expanded dynamic search ad.
+ *
+ * Generated from protobuf enum EXPANDED_DYNAMIC_SEARCH_AD = 7;
+ */
+ const EXPANDED_DYNAMIC_SEARCH_AD = 7;
+ /**
+ * The ad is a hotel ad.
+ *
+ * Generated from protobuf enum HOTEL_AD = 8;
+ */
+ const HOTEL_AD = 8;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Enums/AdvertisingChannelSubTypeEnum.php b/src/Google/Ads/GoogleAds/V0/Enums/AdvertisingChannelSubTypeEnum.php
new file mode 100644
index 000000000..d1dc77434
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Enums/AdvertisingChannelSubTypeEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.enums.AdvertisingChannelSubTypeEnum
+ */
+class AdvertisingChannelSubTypeEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Enums\AdvertisingChannelSubType::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Enums/AdvertisingChannelSubTypeEnum_AdvertisingChannelSubType.php b/src/Google/Ads/GoogleAds/V0/Enums/AdvertisingChannelSubTypeEnum_AdvertisingChannelSubType.php
new file mode 100644
index 000000000..ac80f6338
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Enums/AdvertisingChannelSubTypeEnum_AdvertisingChannelSubType.php
@@ -0,0 +1,39 @@
+Google\Ads\Googleads\V0\Enums\AdvertisingChannelSubTypeEnum\AdvertisingChannelSubType
+ */
+class AdvertisingChannelSubTypeEnum_AdvertisingChannelSubType
+{
+ /**
+ * Not specified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * Used as a return value only. Represents value unknown in this version.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * Mobile app campaigns for Search.
+ *
+ * Generated from protobuf enum SEARCH_MOBILE_APP = 2;
+ */
+ const SEARCH_MOBILE_APP = 2;
+ /**
+ * AdWords express campaigns for search.
+ *
+ * Generated from protobuf enum SEARCH_EXPRESS = 4;
+ */
+ const SEARCH_EXPRESS = 4;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Enums/AdvertisingChannelTypeEnum.php b/src/Google/Ads/GoogleAds/V0/Enums/AdvertisingChannelTypeEnum.php
new file mode 100644
index 000000000..4634354b1
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Enums/AdvertisingChannelTypeEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.enums.AdvertisingChannelTypeEnum
+ */
+class AdvertisingChannelTypeEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Enums\AdvertisingChannelType::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Enums/AdvertisingChannelTypeEnum_AdvertisingChannelType.php b/src/Google/Ads/GoogleAds/V0/Enums/AdvertisingChannelTypeEnum_AdvertisingChannelType.php
new file mode 100644
index 000000000..15ca537f6
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Enums/AdvertisingChannelTypeEnum_AdvertisingChannelType.php
@@ -0,0 +1,39 @@
+Google\Ads\Googleads\V0\Enums\AdvertisingChannelTypeEnum\AdvertisingChannelType
+ */
+class AdvertisingChannelTypeEnum_AdvertisingChannelType
+{
+ /**
+ * Not specified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * Used for return value only. Represents value unknown in this version.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * Search Network. Includes display bundled, and Search+ campaigns.
+ *
+ * Generated from protobuf enum SEARCH = 2;
+ */
+ const SEARCH = 2;
+ /**
+ * Hotel Ads campaigns.
+ *
+ * Generated from protobuf enum HOTEL = 5;
+ */
+ const HOTEL = 5;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Enums/BiddingSourceEnum.php b/src/Google/Ads/GoogleAds/V0/Enums/BiddingSourceEnum.php
new file mode 100644
index 000000000..77c4f9bfd
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Enums/BiddingSourceEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.enums.BiddingSourceEnum
+ */
+class BiddingSourceEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Enums\BiddingSource::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Enums/BiddingSourceEnum_BiddingSource.php b/src/Google/Ads/GoogleAds/V0/Enums/BiddingSourceEnum_BiddingSource.php
new file mode 100644
index 000000000..c34a8ea5a
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Enums/BiddingSourceEnum_BiddingSource.php
@@ -0,0 +1,45 @@
+Google\Ads\Googleads\V0\Enums\BiddingSourceEnum\BiddingSource
+ */
+class BiddingSourceEnum_BiddingSource
+{
+ /**
+ * Not specified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * Used for return value only. Represents value unknown in this version.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * Bidding entity is defined on the ad group.
+ *
+ * Generated from protobuf enum ADGROUP = 2;
+ */
+ const ADGROUP = 2;
+ /**
+ * Bidding entity is defined on the ad group criterion.
+ *
+ * Generated from protobuf enum CRITERION = 3;
+ */
+ const CRITERION = 3;
+ /**
+ * Effective bidding entity is inherited from campaign bidding strategy.
+ *
+ * Generated from protobuf enum CAMPAIGN_BIDDING_STRATEGY = 5;
+ */
+ const CAMPAIGN_BIDDING_STRATEGY = 5;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Enums/BiddingStrategyTypeEnum.php b/src/Google/Ads/GoogleAds/V0/Enums/BiddingStrategyTypeEnum.php
new file mode 100644
index 000000000..1d3a23cc2
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Enums/BiddingStrategyTypeEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.enums.BiddingStrategyTypeEnum
+ */
+class BiddingStrategyTypeEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Enums\BiddingStrategyType::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Enums/BiddingStrategyTypeEnum_BiddingStrategyType.php b/src/Google/Ads/GoogleAds/V0/Enums/BiddingStrategyTypeEnum_BiddingStrategyType.php
new file mode 100644
index 000000000..918d41594
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Enums/BiddingStrategyTypeEnum_BiddingStrategyType.php
@@ -0,0 +1,100 @@
+Google\Ads\Googleads\V0\Enums\BiddingStrategyTypeEnum\BiddingStrategyType
+ */
+class BiddingStrategyTypeEnum_BiddingStrategyType
+{
+ /**
+ * Not specified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * Used for return value only. Represents value unknown in this version.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * Enhanced CPC is a bidding strategy that raises bids for clicks
+ * that seem more likely to lead to a conversion and lowers
+ * them for clicks where they seem less likely.
+ *
+ * Generated from protobuf enum ENHANCED_CPC = 2;
+ */
+ const ENHANCED_CPC = 2;
+ /**
+ * Manual click based bidding where user pays per click.
+ *
+ * Generated from protobuf enum MANUAL_CPC = 3;
+ */
+ const MANUAL_CPC = 3;
+ /**
+ * Manual impression based bidding
+ * where user pays per thousand impressions.
+ *
+ * Generated from protobuf enum MANUAL_CPM = 4;
+ */
+ const MANUAL_CPM = 4;
+ /**
+ * A bidding strategy that automatically maximizes number of conversions
+ * given a daily budget.
+ *
+ * Generated from protobuf enum MAXIMIZE_CONVERSIONS = 10;
+ */
+ const MAXIMIZE_CONVERSIONS = 10;
+ /**
+ * An automated bidding strategy that automatically sets bids to maximize
+ * revenue while spending your budget.
+ *
+ * Generated from protobuf enum MAXIMIZE_CONVERSION_VALUE = 11;
+ */
+ const MAXIMIZE_CONVERSION_VALUE = 11;
+ /**
+ * Page-One Promoted bidding scheme, which sets max cpc bids to
+ * target impressions on page one or page one promoted slots on google.com.
+ *
+ * Generated from protobuf enum PAGE_ONE_PROMOTED = 5;
+ */
+ const PAGE_ONE_PROMOTED = 5;
+ /**
+ * Target CPA is an automated bid strategy that sets bids
+ * to help get as many conversions as possible
+ * at the target cost-per-acquisition (CPA) you set.
+ *
+ * Generated from protobuf enum TARGET_CPA = 6;
+ */
+ const TARGET_CPA = 6;
+ /**
+ * Target Outrank Share is an automated bidding strategy that sets bids
+ * based on the target fraction of auctions where the advertiser
+ * should outrank a specific competitor.
+ *
+ * Generated from protobuf enum TARGET_OUTRANK_SHARE = 7;
+ */
+ const TARGET_OUTRANK_SHARE = 7;
+ /**
+ * Target ROAS is an automated bidding strategy
+ * that helps you maximize revenue while averaging
+ * a specific target Return On Average Spend (ROAS).
+ *
+ * Generated from protobuf enum TARGET_ROAS = 8;
+ */
+ const TARGET_ROAS = 8;
+ /**
+ * Target Spend is an automated bid strategy that sets your bids
+ * to help get as many clicks as possible within your budget.
+ *
+ * Generated from protobuf enum TARGET_SPEND = 9;
+ */
+ const TARGET_SPEND = 9;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Enums/BudgetDeliveryMethodEnum.php b/src/Google/Ads/GoogleAds/V0/Enums/BudgetDeliveryMethodEnum.php
new file mode 100644
index 000000000..83d97e1e0
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Enums/BudgetDeliveryMethodEnum.php
@@ -0,0 +1,26 @@
+google.ads.googleads.v0.enums.BudgetDeliveryMethodEnum
+ */
+class BudgetDeliveryMethodEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Enums\BudgetDeliveryMethod::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Enums/BudgetDeliveryMethodEnum_BudgetDeliveryMethod.php b/src/Google/Ads/GoogleAds/V0/Enums/BudgetDeliveryMethodEnum_BudgetDeliveryMethod.php
new file mode 100644
index 000000000..905281828
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Enums/BudgetDeliveryMethodEnum_BudgetDeliveryMethod.php
@@ -0,0 +1,41 @@
+Google\Ads\Googleads\V0\Enums\BudgetDeliveryMethodEnum\BudgetDeliveryMethod
+ */
+class BudgetDeliveryMethodEnum_BudgetDeliveryMethod
+{
+ /**
+ * Not specified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * Used for return value only. Represents value unknown in this version.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * The budget server will throttle serving evenly across
+ * the entire time period.
+ *
+ * Generated from protobuf enum STANDARD = 2;
+ */
+ const STANDARD = 2;
+ /**
+ * The budget server will not throttle serving,
+ * and ads will serve as fast as possible.
+ *
+ * Generated from protobuf enum ACCELERATED = 3;
+ */
+ const ACCELERATED = 3;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Enums/BudgetStatusEnum.php b/src/Google/Ads/GoogleAds/V0/Enums/BudgetStatusEnum.php
new file mode 100644
index 000000000..8b32e41b1
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Enums/BudgetStatusEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.enums.BudgetStatusEnum
+ */
+class BudgetStatusEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Enums\BudgetStatus::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Enums/BudgetStatusEnum_BudgetStatus.php b/src/Google/Ads/GoogleAds/V0/Enums/BudgetStatusEnum_BudgetStatus.php
new file mode 100644
index 000000000..b5c019ca6
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Enums/BudgetStatusEnum_BudgetStatus.php
@@ -0,0 +1,39 @@
+Google\Ads\Googleads\V0\Enums\BudgetStatusEnum\BudgetStatus
+ */
+class BudgetStatusEnum_BudgetStatus
+{
+ /**
+ * Not specified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * Used for return value only. Represents value unknown in this version.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * Budget is enabled.
+ *
+ * Generated from protobuf enum ENABLED = 2;
+ */
+ const ENABLED = 2;
+ /**
+ * Budget is removed.
+ *
+ * Generated from protobuf enum REMOVED = 3;
+ */
+ const REMOVED = 3;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Enums/CampaignServingStatusEnum.php b/src/Google/Ads/GoogleAds/V0/Enums/CampaignServingStatusEnum.php
new file mode 100644
index 000000000..cc5ea35e7
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Enums/CampaignServingStatusEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.enums.CampaignServingStatusEnum
+ */
+class CampaignServingStatusEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Enums\CampaignServingStatus::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Enums/CampaignServingStatusEnum_CampaignServingStatus.php b/src/Google/Ads/GoogleAds/V0/Enums/CampaignServingStatusEnum_CampaignServingStatus.php
new file mode 100644
index 000000000..2bcf41dfb
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Enums/CampaignServingStatusEnum_CampaignServingStatus.php
@@ -0,0 +1,58 @@
+Google\Ads\Googleads\V0\Enums\CampaignServingStatusEnum\CampaignServingStatus
+ */
+class CampaignServingStatusEnum_CampaignServingStatus
+{
+ /**
+ * No value has been specified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * The received value is not known in this version.
+ * This is a response-only value.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * Serving.
+ *
+ * Generated from protobuf enum SERVING = 2;
+ */
+ const SERVING = 2;
+ /**
+ * None.
+ *
+ * Generated from protobuf enum NONE = 3;
+ */
+ const NONE = 3;
+ /**
+ * Ended.
+ *
+ * Generated from protobuf enum ENDED = 4;
+ */
+ const ENDED = 4;
+ /**
+ * Pending.
+ *
+ * Generated from protobuf enum PENDING = 5;
+ */
+ const PENDING = 5;
+ /**
+ * Suspended.
+ *
+ * Generated from protobuf enum SUSPENDED = 6;
+ */
+ const SUSPENDED = 6;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Enums/CampaignStatusEnum.php b/src/Google/Ads/GoogleAds/V0/Enums/CampaignStatusEnum.php
new file mode 100644
index 000000000..1bfd8b009
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Enums/CampaignStatusEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.enums.CampaignStatusEnum
+ */
+class CampaignStatusEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Enums\CampaignStatus::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Enums/CampaignStatusEnum_CampaignStatus.php b/src/Google/Ads/GoogleAds/V0/Enums/CampaignStatusEnum_CampaignStatus.php
new file mode 100644
index 000000000..a5ac3cc0c
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Enums/CampaignStatusEnum_CampaignStatus.php
@@ -0,0 +1,45 @@
+Google\Ads\Googleads\V0\Enums\CampaignStatusEnum\CampaignStatus
+ */
+class CampaignStatusEnum_CampaignStatus
+{
+ /**
+ * Not specified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * Used for return value only. Represents value unknown in this version.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * Campaign is currently serving ads depending on budget information.
+ *
+ * Generated from protobuf enum ENABLED = 2;
+ */
+ const ENABLED = 2;
+ /**
+ * Campaign has been paused by the user.
+ *
+ * Generated from protobuf enum PAUSED = 3;
+ */
+ const PAUSED = 3;
+ /**
+ * Campaign has been removed.
+ *
+ * Generated from protobuf enum REMOVED = 4;
+ */
+ const REMOVED = 4;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Enums/CriterionTypeEnum.php b/src/Google/Ads/GoogleAds/V0/Enums/CriterionTypeEnum.php
new file mode 100644
index 000000000..f0a07011d
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Enums/CriterionTypeEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.enums.CriterionTypeEnum
+ */
+class CriterionTypeEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Enums\CriterionType::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Enums/CriterionTypeEnum_CriterionType.php b/src/Google/Ads/GoogleAds/V0/Enums/CriterionTypeEnum_CriterionType.php
new file mode 100644
index 000000000..cb55750cf
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Enums/CriterionTypeEnum_CriterionType.php
@@ -0,0 +1,51 @@
+Google\Ads\Googleads\V0\Enums\CriterionTypeEnum\CriterionType
+ */
+class CriterionTypeEnum_CriterionType
+{
+ /**
+ * Not specified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * Used for return value only. Represents value unknown in this version.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * Keyword. e.g. 'mars cruise'.
+ *
+ * Generated from protobuf enum KEYWORD = 2;
+ */
+ const KEYWORD = 2;
+ /**
+ * Platforms to target.
+ *
+ * Generated from protobuf enum PLATFORM = 6;
+ */
+ const PLATFORM = 6;
+ /**
+ * Locations to target.
+ *
+ * Generated from protobuf enum LOCATION = 7;
+ */
+ const LOCATION = 7;
+ /**
+ * Listing groups to target.
+ *
+ * Generated from protobuf enum LISTING_GROUP = 8;
+ */
+ const LISTING_GROUP = 8;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Enums/DayOfWeekEnum.php b/src/Google/Ads/GoogleAds/V0/Enums/DayOfWeekEnum.php
new file mode 100644
index 000000000..7f6150c0a
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Enums/DayOfWeekEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.enums.DayOfWeekEnum
+ */
+class DayOfWeekEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Enums\DayOfWeek::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Enums/DayOfWeekEnum_DayOfWeek.php b/src/Google/Ads/GoogleAds/V0/Enums/DayOfWeekEnum_DayOfWeek.php
new file mode 100644
index 000000000..ed837a731
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Enums/DayOfWeekEnum_DayOfWeek.php
@@ -0,0 +1,69 @@
+Google\Ads\Googleads\V0\Enums\DayOfWeekEnum\DayOfWeek
+ */
+class DayOfWeekEnum_DayOfWeek
+{
+ /**
+ * Not specified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * The value is unknown in this version.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * Monday.
+ *
+ * Generated from protobuf enum MONDAY = 2;
+ */
+ const MONDAY = 2;
+ /**
+ * Tuesday.
+ *
+ * Generated from protobuf enum TUESDAY = 3;
+ */
+ const TUESDAY = 3;
+ /**
+ * Wednesday.
+ *
+ * Generated from protobuf enum WEDNESDAY = 4;
+ */
+ const WEDNESDAY = 4;
+ /**
+ * Thursday.
+ *
+ * Generated from protobuf enum THURSDAY = 5;
+ */
+ const THURSDAY = 5;
+ /**
+ * Friday.
+ *
+ * Generated from protobuf enum FRIDAY = 6;
+ */
+ const FRIDAY = 6;
+ /**
+ * Saturday.
+ *
+ * Generated from protobuf enum SATURDAY = 7;
+ */
+ const SATURDAY = 7;
+ /**
+ * Sunday.
+ *
+ * Generated from protobuf enum SUNDAY = 8;
+ */
+ const SUNDAY = 8;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Enums/DeviceEnum.php b/src/Google/Ads/GoogleAds/V0/Enums/DeviceEnum.php
new file mode 100644
index 000000000..131cd5ff1
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Enums/DeviceEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.enums.DeviceEnum
+ */
+class DeviceEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Enums\Device::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Enums/DeviceEnum_Device.php b/src/Google/Ads/GoogleAds/V0/Enums/DeviceEnum_Device.php
new file mode 100644
index 000000000..f4b09d62b
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Enums/DeviceEnum_Device.php
@@ -0,0 +1,45 @@
+Google\Ads\Googleads\V0\Enums\DeviceEnum\Device
+ */
+class DeviceEnum_Device
+{
+ /**
+ * Not specified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * The value is unknown in this version.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * Mobile devices with full browsers.
+ *
+ * Generated from protobuf enum MOBILE = 2;
+ */
+ const MOBILE = 2;
+ /**
+ * Tablets with full browsers.
+ *
+ * Generated from protobuf enum TABLET = 3;
+ */
+ const TABLET = 3;
+ /**
+ * Computers.
+ *
+ * Generated from protobuf enum DESKTOP = 4;
+ */
+ const DESKTOP = 4;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Enums/GoogleAdsFieldCategoryEnum.php b/src/Google/Ads/GoogleAds/V0/Enums/GoogleAdsFieldCategoryEnum.php
new file mode 100644
index 000000000..261124bdc
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Enums/GoogleAdsFieldCategoryEnum.php
@@ -0,0 +1,26 @@
+google.ads.googleads.v0.enums.GoogleAdsFieldCategoryEnum
+ */
+class GoogleAdsFieldCategoryEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Enums\GoogleAdsFieldCategory::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Enums/GoogleAdsFieldCategoryEnum_GoogleAdsFieldCategory.php b/src/Google/Ads/GoogleAds/V0/Enums/GoogleAdsFieldCategoryEnum_GoogleAdsFieldCategory.php
new file mode 100644
index 000000000..e91019bb3
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Enums/GoogleAdsFieldCategoryEnum_GoogleAdsFieldCategory.php
@@ -0,0 +1,55 @@
+Google\Ads\Googleads\V0\Enums\GoogleAdsFieldCategoryEnum\GoogleAdsFieldCategory
+ */
+class GoogleAdsFieldCategoryEnum_GoogleAdsFieldCategory
+{
+ /**
+ * Unspecified
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * Unknown
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * The described artifact is a resource.
+ *
+ * Generated from protobuf enum RESOURCE = 2;
+ */
+ const RESOURCE = 2;
+ /**
+ * The described artifact is a field and is an attribute of a resource.
+ * Including a resource attribute field in a query may segment the query if
+ * the resource to which it is attributed segments the resource found in
+ * the FROM clause.
+ *
+ * Generated from protobuf enum ATTRIBUTE = 3;
+ */
+ const ATTRIBUTE = 3;
+ /**
+ * The described artifact is a field and always segments search queries.
+ *
+ * Generated from protobuf enum SEGMENT = 5;
+ */
+ const SEGMENT = 5;
+ /**
+ * The described artifact is a field and is a metric. It never segments
+ * search queries.
+ *
+ * Generated from protobuf enum METRIC = 6;
+ */
+ const METRIC = 6;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Enums/GoogleAdsFieldDataTypeEnum.php b/src/Google/Ads/GoogleAds/V0/Enums/GoogleAdsFieldDataTypeEnum.php
new file mode 100644
index 000000000..72085593c
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Enums/GoogleAdsFieldDataTypeEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.enums.GoogleAdsFieldDataTypeEnum
+ */
+class GoogleAdsFieldDataTypeEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Enums\GoogleAdsFieldDataType::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Enums/GoogleAdsFieldDataTypeEnum_GoogleAdsFieldDataType.php b/src/Google/Ads/GoogleAds/V0/Enums/GoogleAdsFieldDataTypeEnum_GoogleAdsFieldDataType.php
new file mode 100644
index 000000000..ca341bd4b
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Enums/GoogleAdsFieldDataTypeEnum_GoogleAdsFieldDataType.php
@@ -0,0 +1,100 @@
+Google\Ads\Googleads\V0\Enums\GoogleAdsFieldDataTypeEnum\GoogleAdsFieldDataType
+ */
+class GoogleAdsFieldDataTypeEnum_GoogleAdsFieldDataType
+{
+ /**
+ * Unspecified
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * Unknown
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * Maps to google.protobuf.BoolValue
+ * Applicable operators: =, !=
+ *
+ * Generated from protobuf enum BOOLEAN = 2;
+ */
+ const BOOLEAN = 2;
+ /**
+ * Maps to google.protobuf.StringValue. It can be compared using the set of
+ * operators specific to dates however.
+ * Applicable operators: =, <, >, <=, >=, BETWEEN, DURING, and IN
+ *
+ * Generated from protobuf enum DATE = 3;
+ */
+ const DATE = 3;
+ /**
+ * Maps to google.protobuf.DoubleValue
+ * Applicable operators: =, !=, <, >, IN, NOT IN
+ *
+ * Generated from protobuf enum DOUBLE = 4;
+ */
+ const DOUBLE = 4;
+ /**
+ * Maps to an enum. It's specific definition can be found at type_url.
+ * Applicable operators: =, !=, IN, NOT IN
+ *
+ * Generated from protobuf enum ENUM = 5;
+ */
+ const ENUM = 5;
+ /**
+ * Maps to google.protobuf.FloatValue
+ * Applicable operators: =, !=, <, >, IN, NOT IN
+ *
+ * Generated from protobuf enum FLOAT = 6;
+ */
+ const FLOAT = 6;
+ /**
+ * Maps to google.protobuf.Int32Value
+ * Applicable operators: =, !=, <, >, <=, >=, BETWEEN, IN, NOT IN
+ *
+ * Generated from protobuf enum INT32 = 7;
+ */
+ const INT32 = 7;
+ /**
+ * Maps to google.protobuf.Int64Value
+ * Applicable operators: =, !=, <, >, <=, >=, BETWEEN, IN, NOT IN
+ *
+ * Generated from protobuf enum INT64 = 8;
+ */
+ const INT64 = 8;
+ /**
+ * Maps to a protocol buffer message type. The data type's details can be
+ * found in type_url.
+ * No operators work with MESSAGE fields.
+ *
+ * Generated from protobuf enum MESSAGE = 9;
+ */
+ const MESSAGE = 9;
+ /**
+ * Maps to google.protobuf.StringValue. Represents the resource name
+ * (unique id) of a resource or one of its foreign keys.
+ * No operators work with RESOURCE_NAME fields.
+ *
+ * Generated from protobuf enum RESOURCE_NAME = 10;
+ */
+ const RESOURCE_NAME = 10;
+ /**
+ * Maps to google.protobuf.StringValue.
+ * Applicable operators: =, !=, LIKE, NOT LIKE, IN, NOT IN
+ *
+ * Generated from protobuf enum STRING = 11;
+ */
+ const STRING = 11;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Enums/KeywordMatchTypeEnum.php b/src/Google/Ads/GoogleAds/V0/Enums/KeywordMatchTypeEnum.php
new file mode 100644
index 000000000..283e6ca4e
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Enums/KeywordMatchTypeEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.enums.KeywordMatchTypeEnum
+ */
+class KeywordMatchTypeEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Enums\KeywordMatchType::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Enums/KeywordMatchTypeEnum_KeywordMatchType.php b/src/Google/Ads/GoogleAds/V0/Enums/KeywordMatchTypeEnum_KeywordMatchType.php
new file mode 100644
index 000000000..0e1dff412
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Enums/KeywordMatchTypeEnum_KeywordMatchType.php
@@ -0,0 +1,45 @@
+Google\Ads\Googleads\V0\Enums\KeywordMatchTypeEnum\KeywordMatchType
+ */
+class KeywordMatchTypeEnum_KeywordMatchType
+{
+ /**
+ * Not specified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * Used for return value only. Represents value unknown in this version.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * Exact match.
+ *
+ * Generated from protobuf enum EXACT = 2;
+ */
+ const EXACT = 2;
+ /**
+ * Phrase match.
+ *
+ * Generated from protobuf enum PHRASE = 3;
+ */
+ const PHRASE = 3;
+ /**
+ * Broad match.
+ *
+ * Generated from protobuf enum BROAD = 4;
+ */
+ const BROAD = 4;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Enums/ListingCustomAttributeIndexEnum.php b/src/Google/Ads/GoogleAds/V0/Enums/ListingCustomAttributeIndexEnum.php
new file mode 100644
index 000000000..883ab3245
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Enums/ListingCustomAttributeIndexEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.enums.ListingCustomAttributeIndexEnum
+ */
+class ListingCustomAttributeIndexEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Enums\ListingCustomAttributeIndex::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Enums/ListingCustomAttributeIndexEnum_ListingCustomAttributeIndex.php b/src/Google/Ads/GoogleAds/V0/Enums/ListingCustomAttributeIndexEnum_ListingCustomAttributeIndex.php
new file mode 100644
index 000000000..c37454736
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Enums/ListingCustomAttributeIndexEnum_ListingCustomAttributeIndex.php
@@ -0,0 +1,57 @@
+Google\Ads\Googleads\V0\Enums\ListingCustomAttributeIndexEnum\ListingCustomAttributeIndex
+ */
+class ListingCustomAttributeIndexEnum_ListingCustomAttributeIndex
+{
+ /**
+ * Not specified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * Used for return value only. Represents value unknown in this version.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * First listing custom attribute.
+ *
+ * Generated from protobuf enum CUSTOM_ATTRIBUTE_0 = 2;
+ */
+ const CUSTOM_ATTRIBUTE_0 = 2;
+ /**
+ * Second listing custom attribute.
+ *
+ * Generated from protobuf enum CUSTOM_ATTRIBUTE_1 = 3;
+ */
+ const CUSTOM_ATTRIBUTE_1 = 3;
+ /**
+ * Third listing custom attribute.
+ *
+ * Generated from protobuf enum CUSTOM_ATTRIBUTE_2 = 4;
+ */
+ const CUSTOM_ATTRIBUTE_2 = 4;
+ /**
+ * Fourth listing custom attribute.
+ *
+ * Generated from protobuf enum CUSTOM_ATTRIBUTE_3 = 5;
+ */
+ const CUSTOM_ATTRIBUTE_3 = 5;
+ /**
+ * Fifth listing custom attribute.
+ *
+ * Generated from protobuf enum CUSTOM_ATTRIBUTE_4 = 6;
+ */
+ const CUSTOM_ATTRIBUTE_4 = 6;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Enums/ListingGroupTypeEnum.php b/src/Google/Ads/GoogleAds/V0/Enums/ListingGroupTypeEnum.php
new file mode 100644
index 000000000..d7335299a
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Enums/ListingGroupTypeEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.enums.ListingGroupTypeEnum
+ */
+class ListingGroupTypeEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Enums\ListingGroupType::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Enums/ListingGroupTypeEnum_ListingGroupType.php b/src/Google/Ads/GoogleAds/V0/Enums/ListingGroupTypeEnum_ListingGroupType.php
new file mode 100644
index 000000000..26a9f4226
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Enums/ListingGroupTypeEnum_ListingGroupType.php
@@ -0,0 +1,41 @@
+Google\Ads\Googleads\V0\Enums\ListingGroupTypeEnum\ListingGroupType
+ */
+class ListingGroupTypeEnum_ListingGroupType
+{
+ /**
+ * Not specified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * Used for return value only. Represents value unknown in this version.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * Subdivision of products along some listing dimension. These nodes
+ * are not used by serving to target listing entries, but is purely
+ * to define the structure of the tree.
+ *
+ * Generated from protobuf enum SUBDIVISION = 2;
+ */
+ const SUBDIVISION = 2;
+ /**
+ * Listing group unit that defines a bid.
+ *
+ * Generated from protobuf enum UNIT = 3;
+ */
+ const UNIT = 3;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Enums/PageOnePromotedStrategyGoalEnum.php b/src/Google/Ads/GoogleAds/V0/Enums/PageOnePromotedStrategyGoalEnum.php
new file mode 100644
index 000000000..76e64b59e
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Enums/PageOnePromotedStrategyGoalEnum.php
@@ -0,0 +1,26 @@
+google.ads.googleads.v0.enums.PageOnePromotedStrategyGoalEnum
+ */
+class PageOnePromotedStrategyGoalEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Enums\PageOnePromotedStrategyGoal::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Enums/PageOnePromotedStrategyGoalEnum_PageOnePromotedStrategyGoal.php b/src/Google/Ads/GoogleAds/V0/Enums/PageOnePromotedStrategyGoalEnum_PageOnePromotedStrategyGoal.php
new file mode 100644
index 000000000..8bc0b5c23
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Enums/PageOnePromotedStrategyGoalEnum_PageOnePromotedStrategyGoal.php
@@ -0,0 +1,39 @@
+Google\Ads\Googleads\V0\Enums\PageOnePromotedStrategyGoalEnum\PageOnePromotedStrategyGoal
+ */
+class PageOnePromotedStrategyGoalEnum_PageOnePromotedStrategyGoal
+{
+ /**
+ * Not specified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * Used for return value only. Represents value unknown in this version.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * First page on google.com.
+ *
+ * Generated from protobuf enum FIRST_PAGE = 2;
+ */
+ const FIRST_PAGE = 2;
+ /**
+ * Top slots of the first page on google.com.
+ *
+ * Generated from protobuf enum FIRST_PAGE_PROMOTED = 3;
+ */
+ const FIRST_PAGE_PROMOTED = 3;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Enums/QualityScoreBucketEnum.php b/src/Google/Ads/GoogleAds/V0/Enums/QualityScoreBucketEnum.php
new file mode 100644
index 000000000..c76358a4b
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Enums/QualityScoreBucketEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.enums.QualityScoreBucketEnum
+ */
+class QualityScoreBucketEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Enums\QualityScoreBucket::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Enums/QualityScoreBucketEnum_QualityScoreBucket.php b/src/Google/Ads/GoogleAds/V0/Enums/QualityScoreBucketEnum_QualityScoreBucket.php
new file mode 100644
index 000000000..48b21a194
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Enums/QualityScoreBucketEnum_QualityScoreBucket.php
@@ -0,0 +1,45 @@
+Google\Ads\Googleads\V0\Enums\QualityScoreBucketEnum\QualityScoreBucket
+ */
+class QualityScoreBucketEnum_QualityScoreBucket
+{
+ /**
+ * Not specified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * Used for return value only. Represents value unknown in this version.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * Quality of the creative is below average.
+ *
+ * Generated from protobuf enum BELOW_AVERAGE = 2;
+ */
+ const BELOW_AVERAGE = 2;
+ /**
+ * Quality of the creative is average.
+ *
+ * Generated from protobuf enum AVERAGE = 3;
+ */
+ const AVERAGE = 3;
+ /**
+ * Quality of the creative is above average.
+ *
+ * Generated from protobuf enum ABOVE_AVERAGE = 4;
+ */
+ const ABOVE_AVERAGE = 4;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Enums/RecommendationTypeEnum.php b/src/Google/Ads/GoogleAds/V0/Enums/RecommendationTypeEnum.php
new file mode 100644
index 000000000..91ed32328
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Enums/RecommendationTypeEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.enums.RecommendationTypeEnum
+ */
+class RecommendationTypeEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Enums\RecommendationType::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Enums/RecommendationTypeEnum_RecommendationType.php b/src/Google/Ads/GoogleAds/V0/Enums/RecommendationTypeEnum_RecommendationType.php
new file mode 100644
index 000000000..55b96f990
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Enums/RecommendationTypeEnum_RecommendationType.php
@@ -0,0 +1,51 @@
+Google\Ads\Googleads\V0\Enums\RecommendationTypeEnum\RecommendationType
+ */
+class RecommendationTypeEnum_RecommendationType
+{
+ /**
+ * Not specified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * Used for return value only. Represents value unknown in this version.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * Budget recommendation for budget constrained campaigns.
+ *
+ * Generated from protobuf enum CAMPAIGN_BUDGET = 2;
+ */
+ const CAMPAIGN_BUDGET = 2;
+ /**
+ * Keyword recommendation.
+ *
+ * Generated from protobuf enum KEYWORD = 3;
+ */
+ const KEYWORD = 3;
+ /**
+ * Recommendation to add a new text ad.
+ *
+ * Generated from protobuf enum TEXT_AD = 4;
+ */
+ const TEXT_AD = 4;
+ /**
+ * Recommendation to update a campaign to use a Target CPA bidding strategy.
+ *
+ * Generated from protobuf enum TARGET_CPA_OPT_IN = 5;
+ */
+ const TARGET_CPA_OPT_IN = 5;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Enums/SlotEnum.php b/src/Google/Ads/GoogleAds/V0/Enums/SlotEnum.php
new file mode 100644
index 000000000..9f14adb2c
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Enums/SlotEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.enums.SlotEnum
+ */
+class SlotEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Enums\Slot::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Enums/SlotEnum_Slot.php b/src/Google/Ads/GoogleAds/V0/Enums/SlotEnum_Slot.php
new file mode 100644
index 000000000..f85711f64
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Enums/SlotEnum_Slot.php
@@ -0,0 +1,63 @@
+Google\Ads\Googleads\V0\Enums\SlotEnum\Slot
+ */
+class SlotEnum_Slot
+{
+ /**
+ * Not specified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * The value is unknown in this version.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * Google search: Side.
+ *
+ * Generated from protobuf enum SEARCH_SIDE = 2;
+ */
+ const SEARCH_SIDE = 2;
+ /**
+ * Google search: Top.
+ *
+ * Generated from protobuf enum SEARCH_TOP = 3;
+ */
+ const SEARCH_TOP = 3;
+ /**
+ * Google search: Other.
+ *
+ * Generated from protobuf enum SEARCH_OTHER = 4;
+ */
+ const SEARCH_OTHER = 4;
+ /**
+ * Google Display Network.
+ *
+ * Generated from protobuf enum CONTENT = 5;
+ */
+ const CONTENT = 5;
+ /**
+ * Search partners: Top.
+ *
+ * Generated from protobuf enum SEARCH_PARTNER_TOP = 6;
+ */
+ const SEARCH_PARTNER_TOP = 6;
+ /**
+ * Search partners: Other.
+ *
+ * Generated from protobuf enum SEARCH_PARTNER_OTHER = 7;
+ */
+ const SEARCH_PARTNER_OTHER = 7;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Enums/TargetCpaOptInRecommendationGoalEnum.php b/src/Google/Ads/GoogleAds/V0/Enums/TargetCpaOptInRecommendationGoalEnum.php
new file mode 100644
index 000000000..c50d0d4af
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Enums/TargetCpaOptInRecommendationGoalEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.enums.TargetCpaOptInRecommendationGoalEnum
+ */
+class TargetCpaOptInRecommendationGoalEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Enums\TargetCpaOptInRecommendationGoal::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Enums/TargetCpaOptInRecommendationGoalEnum_TargetCpaOptInRecommendationGoal.php b/src/Google/Ads/GoogleAds/V0/Enums/TargetCpaOptInRecommendationGoalEnum_TargetCpaOptInRecommendationGoal.php
new file mode 100644
index 000000000..2d83efa23
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Enums/TargetCpaOptInRecommendationGoalEnum_TargetCpaOptInRecommendationGoal.php
@@ -0,0 +1,52 @@
+Google\Ads\Googleads\V0\Enums\TargetCpaOptInRecommendationGoalEnum\TargetCpaOptInRecommendationGoal
+ */
+class TargetCpaOptInRecommendationGoalEnum_TargetCpaOptInRecommendationGoal
+{
+ /**
+ * Not specified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * Used for return value only. Represents value unknown in this version.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * Recommendation to set Target CPA to maintain the same cost.
+ *
+ * Generated from protobuf enum SAME_COST = 2;
+ */
+ const SAME_COST = 2;
+ /**
+ * Recommendation to set Target CPA to maintain the same conversions.
+ *
+ * Generated from protobuf enum SAME_CONVERSIONS = 3;
+ */
+ const SAME_CONVERSIONS = 3;
+ /**
+ * Recommendation to set Target CPA to maintain the same CPA.
+ *
+ * Generated from protobuf enum SAME_CPA = 4;
+ */
+ const SAME_CPA = 4;
+ /**
+ * Recommendation to set Target CPA to a value that is as close as possible
+ * to, yet lower than, the actual CPA (computed for past 28 days).
+ *
+ * Generated from protobuf enum CLOSEST_CPA = 5;
+ */
+ const CLOSEST_CPA = 5;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/AdCustomizerErrorEnum.php b/src/Google/Ads/GoogleAds/V0/Errors/AdCustomizerErrorEnum.php
new file mode 100644
index 000000000..0d39d5466
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/AdCustomizerErrorEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.errors.AdCustomizerErrorEnum
+ */
+class AdCustomizerErrorEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Errors\AdCustomizerError::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/AdCustomizerErrorEnum_AdCustomizerError.php b/src/Google/Ads/GoogleAds/V0/Errors/AdCustomizerErrorEnum_AdCustomizerError.php
new file mode 100644
index 000000000..6199b8d41
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/AdCustomizerErrorEnum_AdCustomizerError.php
@@ -0,0 +1,57 @@
+Google\Ads\Googleads\V0\Errors\AdCustomizerErrorEnum\AdCustomizerError
+ */
+class AdCustomizerErrorEnum_AdCustomizerError
+{
+ /**
+ * Enum unspecified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * The received error code is not known in this version.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * Invalid date argument in countdown function.
+ *
+ * Generated from protobuf enum COUNTDOWN_INVALID_DATE_FORMAT = 2;
+ */
+ const COUNTDOWN_INVALID_DATE_FORMAT = 2;
+ /**
+ * Countdown end date is in the past.
+ *
+ * Generated from protobuf enum COUNTDOWN_DATE_IN_PAST = 3;
+ */
+ const COUNTDOWN_DATE_IN_PAST = 3;
+ /**
+ * Invalid locale string in countdown function.
+ *
+ * Generated from protobuf enum COUNTDOWN_INVALID_LOCALE = 4;
+ */
+ const COUNTDOWN_INVALID_LOCALE = 4;
+ /**
+ * Days-before argument to countdown function is not positive.
+ *
+ * Generated from protobuf enum COUNTDOWN_INVALID_START_DAYS_BEFORE = 5;
+ */
+ const COUNTDOWN_INVALID_START_DAYS_BEFORE = 5;
+ /**
+ * A user list referenced in an IF function does not exist.
+ *
+ * Generated from protobuf enum UNKNOWN_USER_LIST = 6;
+ */
+ const UNKNOWN_USER_LIST = 6;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/AdErrorEnum.php b/src/Google/Ads/GoogleAds/V0/Errors/AdErrorEnum.php
new file mode 100644
index 000000000..2d48d33f1
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/AdErrorEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.errors.AdErrorEnum
+ */
+class AdErrorEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Errors\AdError::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/AdErrorEnum_AdError.php b/src/Google/Ads/GoogleAds/V0/Errors/AdErrorEnum_AdError.php
new file mode 100644
index 000000000..f9d032f30
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/AdErrorEnum_AdError.php
@@ -0,0 +1,825 @@
+Google\Ads\Googleads\V0\Errors\AdErrorEnum\AdError
+ */
+class AdErrorEnum_AdError
+{
+ /**
+ * Enum unspecified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * The received error code is not known in this version.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * Ad customizers are not supported for ad type.
+ *
+ * Generated from protobuf enum AD_CUSTOMIZERS_NOT_SUPPORTED_FOR_AD_TYPE = 2;
+ */
+ const AD_CUSTOMIZERS_NOT_SUPPORTED_FOR_AD_TYPE = 2;
+ /**
+ * Estimating character sizes the string is too long.
+ *
+ * Generated from protobuf enum APPROXIMATELY_TOO_LONG = 3;
+ */
+ const APPROXIMATELY_TOO_LONG = 3;
+ /**
+ * Estimating character sizes the string is too short.
+ *
+ * Generated from protobuf enum APPROXIMATELY_TOO_SHORT = 4;
+ */
+ const APPROXIMATELY_TOO_SHORT = 4;
+ /**
+ * There is a problem with the snippet.
+ *
+ * Generated from protobuf enum BAD_SNIPPET = 5;
+ */
+ const BAD_SNIPPET = 5;
+ /**
+ * Cannot modify an ad.
+ *
+ * Generated from protobuf enum CANNOT_MODIFY_AD = 6;
+ */
+ const CANNOT_MODIFY_AD = 6;
+ /**
+ * business name and url cannot be set at the same time
+ *
+ * Generated from protobuf enum CANNOT_SET_BUSINESS_NAME_IF_URL_SET = 7;
+ */
+ const CANNOT_SET_BUSINESS_NAME_IF_URL_SET = 7;
+ /**
+ * The specified field is incompatible with this ad's type or settings.
+ *
+ * Generated from protobuf enum CANNOT_SET_FIELD = 8;
+ */
+ const CANNOT_SET_FIELD = 8;
+ /**
+ * Cannot set field when originAdId is set.
+ *
+ * Generated from protobuf enum CANNOT_SET_FIELD_WITH_ORIGIN_AD_ID_SET = 9;
+ */
+ const CANNOT_SET_FIELD_WITH_ORIGIN_AD_ID_SET = 9;
+ /**
+ * Cannot set field when an existing ad id is set for sharing.
+ *
+ * Generated from protobuf enum CANNOT_SET_FIELD_WITH_AD_ID_SET_FOR_SHARING = 10;
+ */
+ const CANNOT_SET_FIELD_WITH_AD_ID_SET_FOR_SHARING = 10;
+ /**
+ * Cannot set allowFlexibleColor false if no color is provided by user.
+ *
+ * Generated from protobuf enum CANNOT_SET_ALLOW_FLEXIBLE_COLOR_FALSE = 11;
+ */
+ const CANNOT_SET_ALLOW_FLEXIBLE_COLOR_FALSE = 11;
+ /**
+ * When user select native, no color control is allowed because we will
+ * always respect publisher color for native format serving.
+ *
+ * Generated from protobuf enum CANNOT_SET_COLOR_CONTROL_WHEN_NATIVE_FORMAT_SETTING = 12;
+ */
+ const CANNOT_SET_COLOR_CONTROL_WHEN_NATIVE_FORMAT_SETTING = 12;
+ /**
+ * Cannot specify a url for the ad type
+ *
+ * Generated from protobuf enum CANNOT_SET_URL = 13;
+ */
+ const CANNOT_SET_URL = 13;
+ /**
+ * Cannot specify a tracking or mobile url without also setting final urls
+ *
+ * Generated from protobuf enum CANNOT_SET_WITHOUT_FINAL_URLS = 14;
+ */
+ const CANNOT_SET_WITHOUT_FINAL_URLS = 14;
+ /**
+ * Cannot specify a legacy url and a final url simultaneously
+ *
+ * Generated from protobuf enum CANNOT_SET_WITH_FINAL_URLS = 15;
+ */
+ const CANNOT_SET_WITH_FINAL_URLS = 15;
+ /**
+ * Cannot specify a legacy url and a tracking url template simultaneously in
+ * a DSA.
+ *
+ * Generated from protobuf enum CANNOT_SET_WITH_TRACKING_URL_TEMPLATE = 16;
+ */
+ const CANNOT_SET_WITH_TRACKING_URL_TEMPLATE = 16;
+ /**
+ * Cannot specify a urls in UrlData and in template fields simultaneously.
+ *
+ * Generated from protobuf enum CANNOT_SET_WITH_URL_DATA = 17;
+ */
+ const CANNOT_SET_WITH_URL_DATA = 17;
+ /**
+ * This operator cannot be used with a subclass of Ad.
+ *
+ * Generated from protobuf enum CANNOT_USE_AD_SUBCLASS_FOR_OPERATOR = 18;
+ */
+ const CANNOT_USE_AD_SUBCLASS_FOR_OPERATOR = 18;
+ /**
+ * Customer is not approved for mobile ads.
+ *
+ * Generated from protobuf enum CUSTOMER_NOT_APPROVED_MOBILEADS = 19;
+ */
+ const CUSTOMER_NOT_APPROVED_MOBILEADS = 19;
+ /**
+ * Customer is not approved for 3PAS richmedia ads.
+ *
+ * Generated from protobuf enum CUSTOMER_NOT_APPROVED_THIRDPARTY_ADS = 20;
+ */
+ const CUSTOMER_NOT_APPROVED_THIRDPARTY_ADS = 20;
+ /**
+ * Customer is not approved for 3PAS redirect richmedia (Ad Exchange) ads.
+ *
+ * Generated from protobuf enum CUSTOMER_NOT_APPROVED_THIRDPARTY_REDIRECT_ADS = 21;
+ */
+ const CUSTOMER_NOT_APPROVED_THIRDPARTY_REDIRECT_ADS = 21;
+ /**
+ * Not an eligible customer
+ *
+ * Generated from protobuf enum CUSTOMER_NOT_ELIGIBLE = 22;
+ */
+ const CUSTOMER_NOT_ELIGIBLE = 22;
+ /**
+ * Customer is not eligible for updating beacon url
+ *
+ * Generated from protobuf enum CUSTOMER_NOT_ELIGIBLE_FOR_UPDATING_BEACON_URL = 23;
+ */
+ const CUSTOMER_NOT_ELIGIBLE_FOR_UPDATING_BEACON_URL = 23;
+ /**
+ * There already exists an ad with the same dimensions in the union.
+ *
+ * Generated from protobuf enum DIMENSION_ALREADY_IN_UNION = 24;
+ */
+ const DIMENSION_ALREADY_IN_UNION = 24;
+ /**
+ * Ad's dimension must be set before setting union dimension.
+ *
+ * Generated from protobuf enum DIMENSION_MUST_BE_SET = 25;
+ */
+ const DIMENSION_MUST_BE_SET = 25;
+ /**
+ * Ad's dimension must be included in the union dimensions.
+ *
+ * Generated from protobuf enum DIMENSION_NOT_IN_UNION = 26;
+ */
+ const DIMENSION_NOT_IN_UNION = 26;
+ /**
+ * Display Url cannot be specified (applies to Ad Exchange Ads)
+ *
+ * Generated from protobuf enum DISPLAY_URL_CANNOT_BE_SPECIFIED = 27;
+ */
+ const DISPLAY_URL_CANNOT_BE_SPECIFIED = 27;
+ /**
+ * Telephone number contains invalid characters or invalid format. Please
+ * re-enter your number using digits (0-9), dashes (-), and parentheses
+ * only.
+ *
+ * Generated from protobuf enum DOMESTIC_PHONE_NUMBER_FORMAT = 28;
+ */
+ const DOMESTIC_PHONE_NUMBER_FORMAT = 28;
+ /**
+ * Emergency telephone numbers are not allowed. Please enter a valid
+ * domestic phone number to connect customers to your business.
+ *
+ * Generated from protobuf enum EMERGENCY_PHONE_NUMBER = 29;
+ */
+ const EMERGENCY_PHONE_NUMBER = 29;
+ /**
+ * A required field was not specified or is an empty string.
+ *
+ * Generated from protobuf enum EMPTY_FIELD = 30;
+ */
+ const EMPTY_FIELD = 30;
+ /**
+ * A feed attribute referenced in an ad customizer tag is not in the ad
+ * customizer mapping for the feed.
+ *
+ * Generated from protobuf enum FEED_ATTRIBUTE_MUST_HAVE_MAPPING_FOR_TYPE_ID = 31;
+ */
+ const FEED_ATTRIBUTE_MUST_HAVE_MAPPING_FOR_TYPE_ID = 31;
+ /**
+ * The ad customizer field mapping for the feed attribute does not match the
+ * expected field type.
+ *
+ * Generated from protobuf enum FEED_ATTRIBUTE_MAPPING_TYPE_MISMATCH = 32;
+ */
+ const FEED_ATTRIBUTE_MAPPING_TYPE_MISMATCH = 32;
+ /**
+ * The use of ad customizer tags in the ad text is disallowed. Details in
+ * trigger.
+ *
+ * Generated from protobuf enum ILLEGAL_AD_CUSTOMIZER_TAG_USE = 33;
+ */
+ const ILLEGAL_AD_CUSTOMIZER_TAG_USE = 33;
+ /**
+ * Tags of the form {PH_x}, where x is a number, are disallowed in ad text.
+ *
+ * Generated from protobuf enum ILLEGAL_TAG_USE = 34;
+ */
+ const ILLEGAL_TAG_USE = 34;
+ /**
+ * The dimensions of the ad are specified or derived in multiple ways and
+ * are not consistent.
+ *
+ * Generated from protobuf enum INCONSISTENT_DIMENSIONS = 35;
+ */
+ const INCONSISTENT_DIMENSIONS = 35;
+ /**
+ * The status cannot differ among template ads of the same union.
+ *
+ * Generated from protobuf enum INCONSISTENT_STATUS_IN_TEMPLATE_UNION = 36;
+ */
+ const INCONSISTENT_STATUS_IN_TEMPLATE_UNION = 36;
+ /**
+ * The length of the string is not valid.
+ *
+ * Generated from protobuf enum INCORRECT_LENGTH = 37;
+ */
+ const INCORRECT_LENGTH = 37;
+ /**
+ * The ad is ineligible for upgrade.
+ *
+ * Generated from protobuf enum INELIGIBLE_FOR_UPGRADE = 38;
+ */
+ const INELIGIBLE_FOR_UPGRADE = 38;
+ /**
+ * User cannot create mobile ad for countries targeted in specified
+ * campaign.
+ *
+ * Generated from protobuf enum INVALID_AD_ADDRESS_CAMPAIGN_TARGET = 39;
+ */
+ const INVALID_AD_ADDRESS_CAMPAIGN_TARGET = 39;
+ /**
+ * Invalid Ad type. A specific type of Ad is required.
+ *
+ * Generated from protobuf enum INVALID_AD_TYPE = 40;
+ */
+ const INVALID_AD_TYPE = 40;
+ /**
+ * Headline, description or phone cannot be present when creating mobile
+ * image ad.
+ *
+ * Generated from protobuf enum INVALID_ATTRIBUTES_FOR_MOBILE_IMAGE = 41;
+ */
+ const INVALID_ATTRIBUTES_FOR_MOBILE_IMAGE = 41;
+ /**
+ * Image cannot be present when creating mobile text ad.
+ *
+ * Generated from protobuf enum INVALID_ATTRIBUTES_FOR_MOBILE_TEXT = 42;
+ */
+ const INVALID_ATTRIBUTES_FOR_MOBILE_TEXT = 42;
+ /**
+ * Invalid call to action text.
+ *
+ * Generated from protobuf enum INVALID_CALL_TO_ACTION_TEXT = 43;
+ */
+ const INVALID_CALL_TO_ACTION_TEXT = 43;
+ /**
+ * Invalid character in URL.
+ *
+ * Generated from protobuf enum INVALID_CHARACTER_FOR_URL = 44;
+ */
+ const INVALID_CHARACTER_FOR_URL = 44;
+ /**
+ * Creative's country code is not valid.
+ *
+ * Generated from protobuf enum INVALID_COUNTRY_CODE = 45;
+ */
+ const INVALID_COUNTRY_CODE = 45;
+ /**
+ * Invalid use of Dynamic Search Ads tags ({lpurl} etc.)
+ *
+ * Generated from protobuf enum INVALID_DSA_URL_TAG = 46;
+ */
+ const INVALID_DSA_URL_TAG = 46;
+ /**
+ * Invalid use of Expanded Dynamic Search Ads tags ({lpurl} etc.)
+ *
+ * Generated from protobuf enum INVALID_EXPANDED_DYNAMIC_SEARCH_AD_TAG = 47;
+ */
+ const INVALID_EXPANDED_DYNAMIC_SEARCH_AD_TAG = 47;
+ /**
+ * An input error whose real reason was not properly mapped (should not
+ * happen).
+ *
+ * Generated from protobuf enum INVALID_INPUT = 48;
+ */
+ const INVALID_INPUT = 48;
+ /**
+ * An invalid markup language was entered.
+ *
+ * Generated from protobuf enum INVALID_MARKUP_LANGUAGE = 49;
+ */
+ const INVALID_MARKUP_LANGUAGE = 49;
+ /**
+ * An invalid mobile carrier was entered.
+ *
+ * Generated from protobuf enum INVALID_MOBILE_CARRIER = 50;
+ */
+ const INVALID_MOBILE_CARRIER = 50;
+ /**
+ * Specified mobile carriers target a country not targeted by the campaign.
+ *
+ * Generated from protobuf enum INVALID_MOBILE_CARRIER_TARGET = 51;
+ */
+ const INVALID_MOBILE_CARRIER_TARGET = 51;
+ /**
+ * Wrong number of elements for given element type
+ *
+ * Generated from protobuf enum INVALID_NUMBER_OF_ELEMENTS = 52;
+ */
+ const INVALID_NUMBER_OF_ELEMENTS = 52;
+ /**
+ * The format of the telephone number is incorrect. Please re-enter the
+ * number using the correct format.
+ *
+ * Generated from protobuf enum INVALID_PHONE_NUMBER_FORMAT = 53;
+ */
+ const INVALID_PHONE_NUMBER_FORMAT = 53;
+ /**
+ * The certified vendor format id is incorrect.
+ *
+ * Generated from protobuf enum INVALID_RICH_MEDIA_CERTIFIED_VENDOR_FORMAT_ID = 54;
+ */
+ const INVALID_RICH_MEDIA_CERTIFIED_VENDOR_FORMAT_ID = 54;
+ /**
+ * The template ad data contains validation errors.
+ *
+ * Generated from protobuf enum INVALID_TEMPLATE_DATA = 55;
+ */
+ const INVALID_TEMPLATE_DATA = 55;
+ /**
+ * The template field doesn't have have the correct type.
+ *
+ * Generated from protobuf enum INVALID_TEMPLATE_ELEMENT_FIELD_TYPE = 56;
+ */
+ const INVALID_TEMPLATE_ELEMENT_FIELD_TYPE = 56;
+ /**
+ * Invalid template id.
+ *
+ * Generated from protobuf enum INVALID_TEMPLATE_ID = 57;
+ */
+ const INVALID_TEMPLATE_ID = 57;
+ /**
+ * After substituting replacement strings, the line is too wide.
+ *
+ * Generated from protobuf enum LINE_TOO_WIDE = 58;
+ */
+ const LINE_TOO_WIDE = 58;
+ /**
+ * The feed referenced must have ad customizer mapping to be used in a
+ * customizer tag.
+ *
+ * Generated from protobuf enum MISSING_AD_CUSTOMIZER_MAPPING = 59;
+ */
+ const MISSING_AD_CUSTOMIZER_MAPPING = 59;
+ /**
+ * Missing address component in template element address field.
+ *
+ * Generated from protobuf enum MISSING_ADDRESS_COMPONENT = 60;
+ */
+ const MISSING_ADDRESS_COMPONENT = 60;
+ /**
+ * An ad name must be entered.
+ *
+ * Generated from protobuf enum MISSING_ADVERTISEMENT_NAME = 61;
+ */
+ const MISSING_ADVERTISEMENT_NAME = 61;
+ /**
+ * Business name must be entered.
+ *
+ * Generated from protobuf enum MISSING_BUSINESS_NAME = 62;
+ */
+ const MISSING_BUSINESS_NAME = 62;
+ /**
+ * Description (line 2) must be entered.
+ *
+ * Generated from protobuf enum MISSING_DESCRIPTION1 = 63;
+ */
+ const MISSING_DESCRIPTION1 = 63;
+ /**
+ * Description (line 3) must be entered.
+ *
+ * Generated from protobuf enum MISSING_DESCRIPTION2 = 64;
+ */
+ const MISSING_DESCRIPTION2 = 64;
+ /**
+ * The destination url must contain at least one tag (e.g. {lpurl})
+ *
+ * Generated from protobuf enum MISSING_DESTINATION_URL_TAG = 65;
+ */
+ const MISSING_DESTINATION_URL_TAG = 65;
+ /**
+ * The tracking url template of ExpandedDynamicSearchAd must contain at
+ * least one tag. (e.g. {lpurl})
+ *
+ * Generated from protobuf enum MISSING_LANDING_PAGE_URL_TAG = 66;
+ */
+ const MISSING_LANDING_PAGE_URL_TAG = 66;
+ /**
+ * A valid dimension must be specified for this ad.
+ *
+ * Generated from protobuf enum MISSING_DIMENSION = 67;
+ */
+ const MISSING_DIMENSION = 67;
+ /**
+ * A display URL must be entered.
+ *
+ * Generated from protobuf enum MISSING_DISPLAY_URL = 68;
+ */
+ const MISSING_DISPLAY_URL = 68;
+ /**
+ * Headline must be entered.
+ *
+ * Generated from protobuf enum MISSING_HEADLINE = 69;
+ */
+ const MISSING_HEADLINE = 69;
+ /**
+ * A height must be entered.
+ *
+ * Generated from protobuf enum MISSING_HEIGHT = 70;
+ */
+ const MISSING_HEIGHT = 70;
+ /**
+ * An image must be entered.
+ *
+ * Generated from protobuf enum MISSING_IMAGE = 71;
+ */
+ const MISSING_IMAGE = 71;
+ /**
+ * Marketing image or product videos are required.
+ *
+ * Generated from protobuf enum MISSING_MARKETING_IMAGE_OR_PRODUCT_VIDEOS = 72;
+ */
+ const MISSING_MARKETING_IMAGE_OR_PRODUCT_VIDEOS = 72;
+ /**
+ * The markup language in which your site is written must be entered.
+ *
+ * Generated from protobuf enum MISSING_MARKUP_LANGUAGES = 73;
+ */
+ const MISSING_MARKUP_LANGUAGES = 73;
+ /**
+ * A mobile carrier must be entered.
+ *
+ * Generated from protobuf enum MISSING_MOBILE_CARRIER = 74;
+ */
+ const MISSING_MOBILE_CARRIER = 74;
+ /**
+ * Phone number must be entered.
+ *
+ * Generated from protobuf enum MISSING_PHONE = 75;
+ */
+ const MISSING_PHONE = 75;
+ /**
+ * Missing required template fields
+ *
+ * Generated from protobuf enum MISSING_REQUIRED_TEMPLATE_FIELDS = 76;
+ */
+ const MISSING_REQUIRED_TEMPLATE_FIELDS = 76;
+ /**
+ * Missing a required field value
+ *
+ * Generated from protobuf enum MISSING_TEMPLATE_FIELD_VALUE = 77;
+ */
+ const MISSING_TEMPLATE_FIELD_VALUE = 77;
+ /**
+ * The ad must have text.
+ *
+ * Generated from protobuf enum MISSING_TEXT = 78;
+ */
+ const MISSING_TEXT = 78;
+ /**
+ * A visible URL must be entered.
+ *
+ * Generated from protobuf enum MISSING_VISIBLE_URL = 79;
+ */
+ const MISSING_VISIBLE_URL = 79;
+ /**
+ * A width must be entered.
+ *
+ * Generated from protobuf enum MISSING_WIDTH = 80;
+ */
+ const MISSING_WIDTH = 80;
+ /**
+ * Only 1 feed can be used as the source of ad customizer substitutions in a
+ * single ad.
+ *
+ * Generated from protobuf enum MULTIPLE_DISTINCT_FEEDS_UNSUPPORTED = 81;
+ */
+ const MULTIPLE_DISTINCT_FEEDS_UNSUPPORTED = 81;
+ /**
+ * TempAdUnionId must be use when adding template ads.
+ *
+ * Generated from protobuf enum MUST_USE_TEMP_AD_UNION_ID_ON_ADD = 82;
+ */
+ const MUST_USE_TEMP_AD_UNION_ID_ON_ADD = 82;
+ /**
+ * The string has too many characters.
+ *
+ * Generated from protobuf enum TOO_LONG = 83;
+ */
+ const TOO_LONG = 83;
+ /**
+ * The string has too few characters.
+ *
+ * Generated from protobuf enum TOO_SHORT = 84;
+ */
+ const TOO_SHORT = 84;
+ /**
+ * Ad union dimensions cannot change for saved ads.
+ *
+ * Generated from protobuf enum UNION_DIMENSIONS_CANNOT_CHANGE = 85;
+ */
+ const UNION_DIMENSIONS_CANNOT_CHANGE = 85;
+ /**
+ * Address component is not {country, lat, lng}.
+ *
+ * Generated from protobuf enum UNKNOWN_ADDRESS_COMPONENT = 86;
+ */
+ const UNKNOWN_ADDRESS_COMPONENT = 86;
+ /**
+ * Unknown unique field name
+ *
+ * Generated from protobuf enum UNKNOWN_FIELD_NAME = 87;
+ */
+ const UNKNOWN_FIELD_NAME = 87;
+ /**
+ * Unknown unique name (template element type specifier)
+ *
+ * Generated from protobuf enum UNKNOWN_UNIQUE_NAME = 88;
+ */
+ const UNKNOWN_UNIQUE_NAME = 88;
+ /**
+ * Unsupported ad dimension
+ *
+ * Generated from protobuf enum UNSUPPORTED_DIMENSIONS = 89;
+ */
+ const UNSUPPORTED_DIMENSIONS = 89;
+ /**
+ * URL starts with an invalid scheme.
+ *
+ * Generated from protobuf enum URL_INVALID_SCHEME = 90;
+ */
+ const URL_INVALID_SCHEME = 90;
+ /**
+ * URL ends with an invalid top-level domain name.
+ *
+ * Generated from protobuf enum URL_INVALID_TOP_LEVEL_DOMAIN = 91;
+ */
+ const URL_INVALID_TOP_LEVEL_DOMAIN = 91;
+ /**
+ * URL contains illegal characters.
+ *
+ * Generated from protobuf enum URL_MALFORMED = 92;
+ */
+ const URL_MALFORMED = 92;
+ /**
+ * URL must contain a host name.
+ *
+ * Generated from protobuf enum URL_NO_HOST = 93;
+ */
+ const URL_NO_HOST = 93;
+ /**
+ * URL not equivalent during upgrade.
+ *
+ * Generated from protobuf enum URL_NOT_EQUIVALENT = 94;
+ */
+ const URL_NOT_EQUIVALENT = 94;
+ /**
+ * URL host name too long to be stored as visible URL (applies to Ad
+ * Exchange ads)
+ *
+ * Generated from protobuf enum URL_HOST_NAME_TOO_LONG = 95;
+ */
+ const URL_HOST_NAME_TOO_LONG = 95;
+ /**
+ * URL must start with a scheme.
+ *
+ * Generated from protobuf enum URL_NO_SCHEME = 96;
+ */
+ const URL_NO_SCHEME = 96;
+ /**
+ * URL should end in a valid domain extension, such as .com or .net.
+ *
+ * Generated from protobuf enum URL_NO_TOP_LEVEL_DOMAIN = 97;
+ */
+ const URL_NO_TOP_LEVEL_DOMAIN = 97;
+ /**
+ * URL must not end with a path.
+ *
+ * Generated from protobuf enum URL_PATH_NOT_ALLOWED = 98;
+ */
+ const URL_PATH_NOT_ALLOWED = 98;
+ /**
+ * URL must not specify a port.
+ *
+ * Generated from protobuf enum URL_PORT_NOT_ALLOWED = 99;
+ */
+ const URL_PORT_NOT_ALLOWED = 99;
+ /**
+ * URL must not contain a query.
+ *
+ * Generated from protobuf enum URL_QUERY_NOT_ALLOWED = 100;
+ */
+ const URL_QUERY_NOT_ALLOWED = 100;
+ /**
+ * A url scheme is not allowed in front of tag in dest url (e.g.
+ * http://{lpurl})
+ *
+ * Generated from protobuf enum URL_SCHEME_BEFORE_DSA_TAG = 101;
+ */
+ const URL_SCHEME_BEFORE_DSA_TAG = 101;
+ /**
+ * A url scheme is not allowed in front of tag in tracking url template
+ * (e.g. http://{lpurl})
+ *
+ * Generated from protobuf enum URL_SCHEME_BEFORE_EXPANDED_DYNAMIC_SEARCH_AD_TAG = 102;
+ */
+ const URL_SCHEME_BEFORE_EXPANDED_DYNAMIC_SEARCH_AD_TAG = 102;
+ /**
+ * The user does not have permissions to create a template ad for the given
+ * template.
+ *
+ * Generated from protobuf enum USER_DOES_NOT_HAVE_ACCESS_TO_TEMPLATE = 103;
+ */
+ const USER_DOES_NOT_HAVE_ACCESS_TO_TEMPLATE = 103;
+ /**
+ * Expandable setting is inconsistent/wrong. For example, an AdX ad is
+ * invalid if it has a expandable vendor format but no expanding directions
+ * specified, or expanding directions is specified, but the vendor format is
+ * not expandable.
+ *
+ * Generated from protobuf enum INCONSISTENT_EXPANDABLE_SETTINGS = 104;
+ */
+ const INCONSISTENT_EXPANDABLE_SETTINGS = 104;
+ /**
+ * Format is invalid
+ *
+ * Generated from protobuf enum INVALID_FORMAT = 105;
+ */
+ const INVALID_FORMAT = 105;
+ /**
+ * The text of this field did not match a pattern of allowed values.
+ *
+ * Generated from protobuf enum INVALID_FIELD_TEXT = 106;
+ */
+ const INVALID_FIELD_TEXT = 106;
+ /**
+ * Template element is mising
+ *
+ * Generated from protobuf enum ELEMENT_NOT_PRESENT = 107;
+ */
+ const ELEMENT_NOT_PRESENT = 107;
+ /**
+ * Error occurred during image processing
+ *
+ * Generated from protobuf enum IMAGE_ERROR = 108;
+ */
+ const IMAGE_ERROR = 108;
+ /**
+ * The value is not within the valid range
+ *
+ * Generated from protobuf enum VALUE_NOT_IN_RANGE = 109;
+ */
+ const VALUE_NOT_IN_RANGE = 109;
+ /**
+ * Template element field is not present
+ *
+ * Generated from protobuf enum FIELD_NOT_PRESENT = 110;
+ */
+ const FIELD_NOT_PRESENT = 110;
+ /**
+ * Address is incomplete
+ *
+ * Generated from protobuf enum ADDRESS_NOT_COMPLETE = 111;
+ */
+ const ADDRESS_NOT_COMPLETE = 111;
+ /**
+ * Invalid address
+ *
+ * Generated from protobuf enum ADDRESS_INVALID = 112;
+ */
+ const ADDRESS_INVALID = 112;
+ /**
+ * Error retrieving specified video
+ *
+ * Generated from protobuf enum VIDEO_RETRIEVAL_ERROR = 113;
+ */
+ const VIDEO_RETRIEVAL_ERROR = 113;
+ /**
+ * Error processing audio
+ *
+ * Generated from protobuf enum AUDIO_ERROR = 114;
+ */
+ const AUDIO_ERROR = 114;
+ /**
+ * Display URL is incorrect for YouTube PYV ads
+ *
+ * Generated from protobuf enum INVALID_YOUTUBE_DISPLAY_URL = 115;
+ */
+ const INVALID_YOUTUBE_DISPLAY_URL = 115;
+ /**
+ * Too many product Images in GmailAd
+ *
+ * Generated from protobuf enum TOO_MANY_PRODUCT_IMAGES = 116;
+ */
+ const TOO_MANY_PRODUCT_IMAGES = 116;
+ /**
+ * Too many product Videos in GmailAd
+ *
+ * Generated from protobuf enum TOO_MANY_PRODUCT_VIDEOS = 117;
+ */
+ const TOO_MANY_PRODUCT_VIDEOS = 117;
+ /**
+ * The device preference is not compatible with the ad type
+ *
+ * Generated from protobuf enum INCOMPATIBLE_AD_TYPE_AND_DEVICE_PREFERENCE = 118;
+ */
+ const INCOMPATIBLE_AD_TYPE_AND_DEVICE_PREFERENCE = 118;
+ /**
+ * Call tracking is not supported for specified country.
+ *
+ * Generated from protobuf enum CALLTRACKING_NOT_SUPPORTED_FOR_COUNTRY = 119;
+ */
+ const CALLTRACKING_NOT_SUPPORTED_FOR_COUNTRY = 119;
+ /**
+ * Carrier specific short number is not allowed.
+ *
+ * Generated from protobuf enum CARRIER_SPECIFIC_SHORT_NUMBER_NOT_ALLOWED = 120;
+ */
+ const CARRIER_SPECIFIC_SHORT_NUMBER_NOT_ALLOWED = 120;
+ /**
+ * Specified phone number type is disallowed.
+ *
+ * Generated from protobuf enum DISALLOWED_NUMBER_TYPE = 121;
+ */
+ const DISALLOWED_NUMBER_TYPE = 121;
+ /**
+ * Phone number not supported for country.
+ *
+ * Generated from protobuf enum PHONE_NUMBER_NOT_SUPPORTED_FOR_COUNTRY = 122;
+ */
+ const PHONE_NUMBER_NOT_SUPPORTED_FOR_COUNTRY = 122;
+ /**
+ * Phone number not supported with call tracking enabled for country.
+ *
+ * Generated from protobuf enum PHONE_NUMBER_NOT_SUPPORTED_WITH_CALLTRACKING_FOR_COUNTRY = 123;
+ */
+ const PHONE_NUMBER_NOT_SUPPORTED_WITH_CALLTRACKING_FOR_COUNTRY = 123;
+ /**
+ * Premium rate phone number is not allowed.
+ *
+ * Generated from protobuf enum PREMIUM_RATE_NUMBER_NOT_ALLOWED = 124;
+ */
+ const PREMIUM_RATE_NUMBER_NOT_ALLOWED = 124;
+ /**
+ * Vanity phone number is not allowed.
+ *
+ * Generated from protobuf enum VANITY_PHONE_NUMBER_NOT_ALLOWED = 125;
+ */
+ const VANITY_PHONE_NUMBER_NOT_ALLOWED = 125;
+ /**
+ * Invalid call conversion type id.
+ *
+ * Generated from protobuf enum INVALID_CALL_CONVERSION_TYPE_ID = 126;
+ */
+ const INVALID_CALL_CONVERSION_TYPE_ID = 126;
+ /**
+ * Cannot disable call conversion and set conversion type id.
+ *
+ * Generated from protobuf enum CANNOT_DISABLE_CALL_CONVERSION_AND_SET_CONVERSION_TYPE_ID = 127;
+ */
+ const CANNOT_DISABLE_CALL_CONVERSION_AND_SET_CONVERSION_TYPE_ID = 127;
+ /**
+ * Cannot set path2 without path1.
+ *
+ * Generated from protobuf enum CANNOT_SET_PATH2_WITHOUT_PATH1 = 128;
+ */
+ const CANNOT_SET_PATH2_WITHOUT_PATH1 = 128;
+ /**
+ * Missing domain name in campaign setting when adding expanded dynamic
+ * search ad.
+ *
+ * Generated from protobuf enum MISSING_DYNAMIC_SEARCH_ADS_SETTING_DOMAIN_NAME = 129;
+ */
+ const MISSING_DYNAMIC_SEARCH_ADS_SETTING_DOMAIN_NAME = 129;
+ /**
+ * The associated ad is not compatible with restriction type.
+ *
+ * Generated from protobuf enum INCOMPATIBLE_WITH_RESTRICTION_TYPE = 130;
+ */
+ const INCOMPATIBLE_WITH_RESTRICTION_TYPE = 130;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/AdGroupAdErrorEnum.php b/src/Google/Ads/GoogleAds/V0/Errors/AdGroupAdErrorEnum.php
new file mode 100644
index 000000000..ffc61eef2
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/AdGroupAdErrorEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.errors.AdGroupAdErrorEnum
+ */
+class AdGroupAdErrorEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Errors\AdGroupAdError::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/AdGroupAdErrorEnum_AdGroupAdError.php b/src/Google/Ads/GoogleAds/V0/Errors/AdGroupAdErrorEnum_AdGroupAdError.php
new file mode 100644
index 000000000..781d93a61
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/AdGroupAdErrorEnum_AdGroupAdError.php
@@ -0,0 +1,77 @@
+Google\Ads\Googleads\V0\Errors\AdGroupAdErrorEnum\AdGroupAdError
+ */
+class AdGroupAdErrorEnum_AdGroupAdError
+{
+ /**
+ * Enum unspecified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * The received error code is not known in this version.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * No link found between the adgroup ad and the label.
+ *
+ * Generated from protobuf enum AD_GROUP_AD_LABEL_DOES_NOT_EXIST = 2;
+ */
+ const AD_GROUP_AD_LABEL_DOES_NOT_EXIST = 2;
+ /**
+ * The label has already been attached to the adgroup ad.
+ *
+ * Generated from protobuf enum AD_GROUP_AD_LABEL_ALREADY_EXISTS = 3;
+ */
+ const AD_GROUP_AD_LABEL_ALREADY_EXISTS = 3;
+ /**
+ * The specified ad was not found in the adgroup
+ *
+ * Generated from protobuf enum AD_NOT_UNDER_ADGROUP = 4;
+ */
+ const AD_NOT_UNDER_ADGROUP = 4;
+ /**
+ * Removed ads may not be modified
+ *
+ * Generated from protobuf enum CANNOT_OPERATE_ON_REMOVED_ADGROUPAD = 5;
+ */
+ const CANNOT_OPERATE_ON_REMOVED_ADGROUPAD = 5;
+ /**
+ * An ad of this type is deprecated and cannot be created. Only deletions
+ * are permitted.
+ *
+ * Generated from protobuf enum CANNOT_CREATE_DEPRECATED_ADS = 6;
+ */
+ const CANNOT_CREATE_DEPRECATED_ADS = 6;
+ /**
+ * Text ads are deprecated and cannot be created. Use expanded text ads
+ * instead.
+ *
+ * Generated from protobuf enum CANNOT_CREATE_TEXT_ADS = 7;
+ */
+ const CANNOT_CREATE_TEXT_ADS = 7;
+ /**
+ * A required field was not specified or is an empty string.
+ *
+ * Generated from protobuf enum EMPTY_FIELD = 8;
+ */
+ const EMPTY_FIELD = 8;
+ /**
+ * An ad may only be modified once per call
+ *
+ * Generated from protobuf enum RESOURCE_REFERENCED_IN_MULTIPLE_OPS = 9;
+ */
+ const RESOURCE_REFERENCED_IN_MULTIPLE_OPS = 9;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/AdGroupBidModifierErrorEnum.php b/src/Google/Ads/GoogleAds/V0/Errors/AdGroupBidModifierErrorEnum.php
new file mode 100644
index 000000000..e1421552f
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/AdGroupBidModifierErrorEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.errors.AdGroupBidModifierErrorEnum
+ */
+class AdGroupBidModifierErrorEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Errors\AdGroupBidModifierError::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/AdGroupBidModifierErrorEnum_AdGroupBidModifierError.php b/src/Google/Ads/GoogleAds/V0/Errors/AdGroupBidModifierErrorEnum_AdGroupBidModifierError.php
new file mode 100644
index 000000000..25fb203cd
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/AdGroupBidModifierErrorEnum_AdGroupBidModifierError.php
@@ -0,0 +1,40 @@
+Google\Ads\Googleads\V0\Errors\AdGroupBidModifierErrorEnum\AdGroupBidModifierError
+ */
+class AdGroupBidModifierErrorEnum_AdGroupBidModifierError
+{
+ /**
+ * Enum unspecified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * The received error code is not known in this version.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * The criterion ID does not support bid modification.
+ *
+ * Generated from protobuf enum CRITERION_ID_NOT_SUPPORTED = 2;
+ */
+ const CRITERION_ID_NOT_SUPPORTED = 2;
+ /**
+ * Cannot override the bid modifier for the given criterion ID if the parent
+ * campaign is opted out of the same criterion.
+ *
+ * Generated from protobuf enum CANNOT_OVERRIDE_OPTED_OUT_CAMPAIGN_CRITERION_BID_MODIFIER = 3;
+ */
+ const CANNOT_OVERRIDE_OPTED_OUT_CAMPAIGN_CRITERION_BID_MODIFIER = 3;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/AdGroupCriterionErrorEnum.php b/src/Google/Ads/GoogleAds/V0/Errors/AdGroupCriterionErrorEnum.php
new file mode 100644
index 000000000..78534bcac
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/AdGroupCriterionErrorEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.errors.AdGroupCriterionErrorEnum
+ */
+class AdGroupCriterionErrorEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Errors\AdGroupCriterionError::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/AdGroupCriterionErrorEnum_AdGroupCriterionError.php b/src/Google/Ads/GoogleAds/V0/Errors/AdGroupCriterionErrorEnum_AdGroupCriterionError.php
new file mode 100644
index 000000000..dbcff7a79
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/AdGroupCriterionErrorEnum_AdGroupCriterionError.php
@@ -0,0 +1,259 @@
+Google\Ads\Googleads\V0\Errors\AdGroupCriterionErrorEnum\AdGroupCriterionError
+ */
+class AdGroupCriterionErrorEnum_AdGroupCriterionError
+{
+ /**
+ * Enum unspecified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * The received error code is not known in this version.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * No link found between the AdGroupCriterion and the label.
+ *
+ * Generated from protobuf enum AD_GROUP_CRITERION_LABEL_DOES_NOT_EXIST = 2;
+ */
+ const AD_GROUP_CRITERION_LABEL_DOES_NOT_EXIST = 2;
+ /**
+ * The label has already been attached to the AdGroupCriterion.
+ *
+ * Generated from protobuf enum AD_GROUP_CRITERION_LABEL_ALREADY_EXISTS = 3;
+ */
+ const AD_GROUP_CRITERION_LABEL_ALREADY_EXISTS = 3;
+ /**
+ * Negative AdGroupCriterion cannot have labels.
+ *
+ * Generated from protobuf enum CANNOT_ADD_LABEL_TO_NEGATIVE_CRITERION = 4;
+ */
+ const CANNOT_ADD_LABEL_TO_NEGATIVE_CRITERION = 4;
+ /**
+ * Too many operations for a single call.
+ *
+ * Generated from protobuf enum TOO_MANY_OPERATIONS = 5;
+ */
+ const TOO_MANY_OPERATIONS = 5;
+ /**
+ * Negative ad group criteria are not updateable.
+ *
+ * Generated from protobuf enum CANT_UPDATE_NEGATIVE = 6;
+ */
+ const CANT_UPDATE_NEGATIVE = 6;
+ /**
+ * Concrete type of criterion (keyword v.s. placement) is required for ADD
+ * and SET operations.
+ *
+ * Generated from protobuf enum CONCRETE_TYPE_REQUIRED = 7;
+ */
+ const CONCRETE_TYPE_REQUIRED = 7;
+ /**
+ * Bid is incompatible with ad group's bidding settings.
+ *
+ * Generated from protobuf enum BID_INCOMPATIBLE_WITH_ADGROUP = 8;
+ */
+ const BID_INCOMPATIBLE_WITH_ADGROUP = 8;
+ /**
+ * Cannot target and exclude the same criterion at once.
+ *
+ * Generated from protobuf enum CANNOT_TARGET_AND_EXCLUDE = 9;
+ */
+ const CANNOT_TARGET_AND_EXCLUDE = 9;
+ /**
+ * The URL of a placement is invalid.
+ *
+ * Generated from protobuf enum ILLEGAL_URL = 10;
+ */
+ const ILLEGAL_URL = 10;
+ /**
+ * Keyword text was invalid.
+ *
+ * Generated from protobuf enum INVALID_KEYWORD_TEXT = 11;
+ */
+ const INVALID_KEYWORD_TEXT = 11;
+ /**
+ * Destination URL was invalid.
+ *
+ * Generated from protobuf enum INVALID_DESTINATION_URL = 12;
+ */
+ const INVALID_DESTINATION_URL = 12;
+ /**
+ * The destination url must contain at least one tag (e.g. {lpurl})
+ *
+ * Generated from protobuf enum MISSING_DESTINATION_URL_TAG = 13;
+ */
+ const MISSING_DESTINATION_URL_TAG = 13;
+ /**
+ * Keyword-level cpm bid is not supported
+ *
+ * Generated from protobuf enum KEYWORD_LEVEL_BID_NOT_SUPPORTED_FOR_MANUALCPM = 14;
+ */
+ const KEYWORD_LEVEL_BID_NOT_SUPPORTED_FOR_MANUALCPM = 14;
+ /**
+ * For example, cannot add a biddable ad group criterion that had been
+ * removed.
+ *
+ * Generated from protobuf enum INVALID_USER_STATUS = 15;
+ */
+ const INVALID_USER_STATUS = 15;
+ /**
+ * Criteria type cannot be targeted for the ad group. Either the account is
+ * restricted to keywords only, the criteria type is incompatible with the
+ * campaign's bidding strategy, or the criteria type can only be applied to
+ * campaigns.
+ *
+ * Generated from protobuf enum CANNOT_ADD_CRITERIA_TYPE = 16;
+ */
+ const CANNOT_ADD_CRITERIA_TYPE = 16;
+ /**
+ * Criteria type cannot be excluded for the ad group. Refer to the
+ * documentation for a specific criterion to check if it is excludable.
+ *
+ * Generated from protobuf enum CANNOT_EXCLUDE_CRITERIA_TYPE = 17;
+ */
+ const CANNOT_EXCLUDE_CRITERIA_TYPE = 17;
+ /**
+ * Partial failure is not supported for shopping campaign mutate operations.
+ *
+ * Generated from protobuf enum CAMPAIGN_TYPE_NOT_COMPATIBLE_WITH_PARTIAL_FAILURE = 27;
+ */
+ const CAMPAIGN_TYPE_NOT_COMPATIBLE_WITH_PARTIAL_FAILURE = 27;
+ /**
+ * Operations in the mutate request changes too many shopping ad groups.
+ * Please split requests for multiple shopping ad groups across multiple
+ * requests.
+ *
+ * Generated from protobuf enum OPERATIONS_FOR_TOO_MANY_SHOPPING_ADGROUPS = 28;
+ */
+ const OPERATIONS_FOR_TOO_MANY_SHOPPING_ADGROUPS = 28;
+ /**
+ * Not allowed to modify url fields of an ad group criterion if there are
+ * duplicate elements for that ad group criterion in the request.
+ *
+ * Generated from protobuf enum CANNOT_MODIFY_URL_FIELDS_WITH_DUPLICATE_ELEMENTS = 29;
+ */
+ const CANNOT_MODIFY_URL_FIELDS_WITH_DUPLICATE_ELEMENTS = 29;
+ /**
+ * Cannot set url fields without also setting final urls.
+ *
+ * Generated from protobuf enum CANNOT_SET_WITHOUT_FINAL_URLS = 30;
+ */
+ const CANNOT_SET_WITHOUT_FINAL_URLS = 30;
+ /**
+ * Cannot clear final urls if final mobile urls exist.
+ *
+ * Generated from protobuf enum CANNOT_CLEAR_FINAL_URLS_IF_FINAL_MOBILE_URLS_EXIST = 31;
+ */
+ const CANNOT_CLEAR_FINAL_URLS_IF_FINAL_MOBILE_URLS_EXIST = 31;
+ /**
+ * Cannot clear final urls if final app urls exist.
+ *
+ * Generated from protobuf enum CANNOT_CLEAR_FINAL_URLS_IF_FINAL_APP_URLS_EXIST = 32;
+ */
+ const CANNOT_CLEAR_FINAL_URLS_IF_FINAL_APP_URLS_EXIST = 32;
+ /**
+ * Cannot clear final urls if tracking url template exists.
+ *
+ * Generated from protobuf enum CANNOT_CLEAR_FINAL_URLS_IF_TRACKING_URL_TEMPLATE_EXISTS = 33;
+ */
+ const CANNOT_CLEAR_FINAL_URLS_IF_TRACKING_URL_TEMPLATE_EXISTS = 33;
+ /**
+ * Cannot clear final urls if url custom parameters exist.
+ *
+ * Generated from protobuf enum CANNOT_CLEAR_FINAL_URLS_IF_URL_CUSTOM_PARAMETERS_EXIST = 34;
+ */
+ const CANNOT_CLEAR_FINAL_URLS_IF_URL_CUSTOM_PARAMETERS_EXIST = 34;
+ /**
+ * Cannot set both destination url and final urls.
+ *
+ * Generated from protobuf enum CANNOT_SET_BOTH_DESTINATION_URL_AND_FINAL_URLS = 35;
+ */
+ const CANNOT_SET_BOTH_DESTINATION_URL_AND_FINAL_URLS = 35;
+ /**
+ * Cannot set both destination url and tracking url template.
+ *
+ * Generated from protobuf enum CANNOT_SET_BOTH_DESTINATION_URL_AND_TRACKING_URL_TEMPLATE = 36;
+ */
+ const CANNOT_SET_BOTH_DESTINATION_URL_AND_TRACKING_URL_TEMPLATE = 36;
+ /**
+ * Final urls are not supported for this criterion type.
+ *
+ * Generated from protobuf enum FINAL_URLS_NOT_SUPPORTED_FOR_CRITERION_TYPE = 37;
+ */
+ const FINAL_URLS_NOT_SUPPORTED_FOR_CRITERION_TYPE = 37;
+ /**
+ * Final mobile urls are not supported for this criterion type.
+ *
+ * Generated from protobuf enum FINAL_MOBILE_URLS_NOT_SUPPORTED_FOR_CRITERION_TYPE = 38;
+ */
+ const FINAL_MOBILE_URLS_NOT_SUPPORTED_FOR_CRITERION_TYPE = 38;
+ /**
+ * Ad group is invalid due to the listing groups it contains.
+ *
+ * Generated from protobuf enum INVALID_LISTING_GROUP_HIERARCHY = 39;
+ */
+ const INVALID_LISTING_GROUP_HIERARCHY = 39;
+ /**
+ * Listing group unit cannot have children.
+ *
+ * Generated from protobuf enum LISTING_GROUP_UNIT_CANNOT_HAVE_CHILDREN = 40;
+ */
+ const LISTING_GROUP_UNIT_CANNOT_HAVE_CHILDREN = 40;
+ /**
+ * Subdivided listing groups must have an "others" case.
+ *
+ * Generated from protobuf enum LISTING_GROUP_SUBDIVISION_REQUIRES_OTHERS_CASE = 41;
+ */
+ const LISTING_GROUP_SUBDIVISION_REQUIRES_OTHERS_CASE = 41;
+ /**
+ * Dimension type of listing group must be the same as that of its siblings.
+ *
+ * Generated from protobuf enum LISTING_GROUP_REQUIRES_SAME_DIMENSION_TYPE_AS_SIBLINGS = 42;
+ */
+ const LISTING_GROUP_REQUIRES_SAME_DIMENSION_TYPE_AS_SIBLINGS = 42;
+ /**
+ * Listing group cannot be added to the ad group because it already exists.
+ *
+ * Generated from protobuf enum LISTING_GROUP_ALREADY_EXISTS = 43;
+ */
+ const LISTING_GROUP_ALREADY_EXISTS = 43;
+ /**
+ * Listing group referenced in the operation was not found in the ad group.
+ *
+ * Generated from protobuf enum LISTING_GROUP_DOES_NOT_EXIST = 44;
+ */
+ const LISTING_GROUP_DOES_NOT_EXIST = 44;
+ /**
+ * Recursive removal failed because listing group subdivision is being
+ * created or modified in this request.
+ *
+ * Generated from protobuf enum LISTING_GROUP_CANNOT_BE_REMOVED = 45;
+ */
+ const LISTING_GROUP_CANNOT_BE_REMOVED = 45;
+ /**
+ * Listing group type is not allowed for specified ad group criterion type.
+ *
+ * Generated from protobuf enum INVALID_LISTING_GROUP_TYPE = 46;
+ */
+ const INVALID_LISTING_GROUP_TYPE = 46;
+ /**
+ * Listing group in an ADD operation specifies a non temporary criterion id.
+ *
+ * Generated from protobuf enum LISTING_GROUP_ADD_MAY_ONLY_USE_TEMP_ID = 47;
+ */
+ const LISTING_GROUP_ADD_MAY_ONLY_USE_TEMP_ID = 47;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/AdGroupErrorEnum.php b/src/Google/Ads/GoogleAds/V0/Errors/AdGroupErrorEnum.php
new file mode 100644
index 000000000..763f4c07a
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/AdGroupErrorEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.errors.AdGroupErrorEnum
+ */
+class AdGroupErrorEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Errors\AdGroupError::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/AdGroupErrorEnum_AdGroupError.php b/src/Google/Ads/GoogleAds/V0/Errors/AdGroupErrorEnum_AdGroupError.php
new file mode 100644
index 000000000..1b64834d5
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/AdGroupErrorEnum_AdGroupError.php
@@ -0,0 +1,102 @@
+Google\Ads\Googleads\V0\Errors\AdGroupErrorEnum\AdGroupError
+ */
+class AdGroupErrorEnum_AdGroupError
+{
+ /**
+ * Enum unspecified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * The received error code is not known in this version.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * AdGroup with the same name already exists for the campaign.
+ *
+ * Generated from protobuf enum DUPLICATE_ADGROUP_NAME = 2;
+ */
+ const DUPLICATE_ADGROUP_NAME = 2;
+ /**
+ * AdGroup name is not valid.
+ *
+ * Generated from protobuf enum INVALID_ADGROUP_NAME = 3;
+ */
+ const INVALID_ADGROUP_NAME = 3;
+ /**
+ * Advertiser is not allowed to target sites or set site bids that are not
+ * on the Google Search Network.
+ *
+ * Generated from protobuf enum ADVERTISER_NOT_ON_CONTENT_NETWORK = 5;
+ */
+ const ADVERTISER_NOT_ON_CONTENT_NETWORK = 5;
+ /**
+ * Bid amount is too big.
+ *
+ * Generated from protobuf enum BID_TOO_BIG = 6;
+ */
+ const BID_TOO_BIG = 6;
+ /**
+ * AdGroup bid does not match the campaign's bidding strategy.
+ *
+ * Generated from protobuf enum BID_TYPE_AND_BIDDING_STRATEGY_MISMATCH = 7;
+ */
+ const BID_TYPE_AND_BIDDING_STRATEGY_MISMATCH = 7;
+ /**
+ * AdGroup name is required for Add.
+ *
+ * Generated from protobuf enum MISSING_ADGROUP_NAME = 8;
+ */
+ const MISSING_ADGROUP_NAME = 8;
+ /**
+ * No link found between the ad group and the label.
+ *
+ * Generated from protobuf enum ADGROUP_LABEL_DOES_NOT_EXIST = 9;
+ */
+ const ADGROUP_LABEL_DOES_NOT_EXIST = 9;
+ /**
+ * The label has already been attached to the ad group.
+ *
+ * Generated from protobuf enum ADGROUP_LABEL_ALREADY_EXISTS = 10;
+ */
+ const ADGROUP_LABEL_ALREADY_EXISTS = 10;
+ /**
+ * The CriterionTypeGroup is not supported for the content bid dimension.
+ *
+ * Generated from protobuf enum INVALID_CONTENT_BID_CRITERION_TYPE_GROUP = 11;
+ */
+ const INVALID_CONTENT_BID_CRITERION_TYPE_GROUP = 11;
+ /**
+ * The ad group type is not compatible with the campaign channel type.
+ *
+ * Generated from protobuf enum AD_GROUP_TYPE_NOT_VALID_FOR_ADVERTISING_CHANNEL_TYPE = 12;
+ */
+ const AD_GROUP_TYPE_NOT_VALID_FOR_ADVERTISING_CHANNEL_TYPE = 12;
+ /**
+ * The ad group type is not supported in the country of sale of the
+ * campaign.
+ *
+ * Generated from protobuf enum ADGROUP_TYPE_NOT_SUPPORTED_FOR_CAMPAIGN_SALES_COUNTRY = 13;
+ */
+ const ADGROUP_TYPE_NOT_SUPPORTED_FOR_CAMPAIGN_SALES_COUNTRY = 13;
+ /**
+ * Ad groups of AdGroupType.SEARCH_DYNAMIC_ADS can only be added to
+ * campaigns that have DynamicSearchAdsSetting attached.
+ *
+ * Generated from protobuf enum CANNOT_ADD_ADGROUP_OF_TYPE_DSA_TO_CAMPAIGN_WITHOUT_DSA_SETTING = 14;
+ */
+ const CANNOT_ADD_ADGROUP_OF_TYPE_DSA_TO_CAMPAIGN_WITHOUT_DSA_SETTING = 14;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/AdSharingErrorEnum.php b/src/Google/Ads/GoogleAds/V0/Errors/AdSharingErrorEnum.php
new file mode 100644
index 000000000..3a9de1664
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/AdSharingErrorEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.errors.AdSharingErrorEnum
+ */
+class AdSharingErrorEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Errors\AdSharingError::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/AdSharingErrorEnum_AdSharingError.php b/src/Google/Ads/GoogleAds/V0/Errors/AdSharingErrorEnum_AdSharingError.php
new file mode 100644
index 000000000..b2387d764
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/AdSharingErrorEnum_AdSharingError.php
@@ -0,0 +1,46 @@
+Google\Ads\Googleads\V0\Errors\AdSharingErrorEnum\AdSharingError
+ */
+class AdSharingErrorEnum_AdSharingError
+{
+ /**
+ * Enum unspecified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * The received error code is not known in this version.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * Error resulting in attempting to add an Ad to an AdGroup that already
+ * contains the Ad.
+ *
+ * Generated from protobuf enum AD_GROUP_ALREADY_CONTAINS_AD = 2;
+ */
+ const AD_GROUP_ALREADY_CONTAINS_AD = 2;
+ /**
+ * Ad is not compatible with the AdGroup it is being shared with.
+ *
+ * Generated from protobuf enum INCOMPATIBLE_AD_UNDER_AD_GROUP = 3;
+ */
+ const INCOMPATIBLE_AD_UNDER_AD_GROUP = 3;
+ /**
+ * Cannot add AdGroupAd on inactive Ad.
+ *
+ * Generated from protobuf enum CANNOT_SHARE_INACTIVE_AD = 4;
+ */
+ const CANNOT_SHARE_INACTIVE_AD = 4;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/AdxErrorEnum.php b/src/Google/Ads/GoogleAds/V0/Errors/AdxErrorEnum.php
new file mode 100644
index 000000000..07465669e
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/AdxErrorEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.errors.AdxErrorEnum
+ */
+class AdxErrorEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Errors\AdxError::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/AdxErrorEnum_AdxError.php b/src/Google/Ads/GoogleAds/V0/Errors/AdxErrorEnum_AdxError.php
new file mode 100644
index 000000000..83f6c6f0a
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/AdxErrorEnum_AdxError.php
@@ -0,0 +1,33 @@
+Google\Ads\Googleads\V0\Errors\AdxErrorEnum\AdxError
+ */
+class AdxErrorEnum_AdxError
+{
+ /**
+ * Enum unspecified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * The received error code is not known in this version.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * Attempt to use non-AdX feature by AdX customer.
+ *
+ * Generated from protobuf enum UNSUPPORTED_FEATURE = 2;
+ */
+ const UNSUPPORTED_FEATURE = 2;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/AuthenticationErrorEnum.php b/src/Google/Ads/GoogleAds/V0/Errors/AuthenticationErrorEnum.php
new file mode 100644
index 000000000..d035f4d9e
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/AuthenticationErrorEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.errors.AuthenticationErrorEnum
+ */
+class AuthenticationErrorEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Errors\AuthenticationError::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/AuthenticationErrorEnum_AuthenticationError.php b/src/Google/Ads/GoogleAds/V0/Errors/AuthenticationErrorEnum_AuthenticationError.php
new file mode 100644
index 000000000..84552f3b1
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/AuthenticationErrorEnum_AuthenticationError.php
@@ -0,0 +1,130 @@
+Google\Ads\Googleads\V0\Errors\AuthenticationErrorEnum\AuthenticationError
+ */
+class AuthenticationErrorEnum_AuthenticationError
+{
+ /**
+ * Enum unspecified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * The received error code is not known in this version.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * Authentication of the request failed.
+ *
+ * Generated from protobuf enum AUTHENTICATION_ERROR = 2;
+ */
+ const AUTHENTICATION_ERROR = 2;
+ /**
+ * Client customer Id is not a number.
+ *
+ * Generated from protobuf enum CLIENT_CUSTOMER_ID_INVALID = 5;
+ */
+ const CLIENT_CUSTOMER_ID_INVALID = 5;
+ /**
+ * No customer found for the customer id provided in the header.
+ *
+ * Generated from protobuf enum CUSTOMER_NOT_FOUND = 8;
+ */
+ const CUSTOMER_NOT_FOUND = 8;
+ /**
+ * Client's Google Account is deleted.
+ *
+ * Generated from protobuf enum GOOGLE_ACCOUNT_DELETED = 9;
+ */
+ const GOOGLE_ACCOUNT_DELETED = 9;
+ /**
+ * Google account login token in the cookie is invalid.
+ *
+ * Generated from protobuf enum GOOGLE_ACCOUNT_COOKIE_INVALID = 10;
+ */
+ const GOOGLE_ACCOUNT_COOKIE_INVALID = 10;
+ /**
+ * A problem occurred during Google account authentication.
+ *
+ * Generated from protobuf enum FAILED_TO_AUTHENTICATE_GOOGLE_ACCOUNT = 11;
+ */
+ const FAILED_TO_AUTHENTICATE_GOOGLE_ACCOUNT = 11;
+ /**
+ * The user in the google account login token does not match the UserId in
+ * the cookie.
+ *
+ * Generated from protobuf enum GOOGLE_ACCOUNT_USER_AND_ADS_USER_MISMATCH = 12;
+ */
+ const GOOGLE_ACCOUNT_USER_AND_ADS_USER_MISMATCH = 12;
+ /**
+ * Login cookie is required for authentication.
+ *
+ * Generated from protobuf enum LOGIN_COOKIE_REQUIRED = 13;
+ */
+ const LOGIN_COOKIE_REQUIRED = 13;
+ /**
+ * User in the cookie is not a valid Ads user.
+ *
+ * Generated from protobuf enum NOT_ADS_USER = 14;
+ */
+ const NOT_ADS_USER = 14;
+ /**
+ * Oauth token in the header is not valid.
+ *
+ * Generated from protobuf enum OAUTH_TOKEN_INVALID = 15;
+ */
+ const OAUTH_TOKEN_INVALID = 15;
+ /**
+ * Oauth token in the header has expired.
+ *
+ * Generated from protobuf enum OAUTH_TOKEN_EXPIRED = 16;
+ */
+ const OAUTH_TOKEN_EXPIRED = 16;
+ /**
+ * Oauth token in the header has been disabled.
+ *
+ * Generated from protobuf enum OAUTH_TOKEN_DISABLED = 17;
+ */
+ const OAUTH_TOKEN_DISABLED = 17;
+ /**
+ * Oauth token in the header has been revoked.
+ *
+ * Generated from protobuf enum OAUTH_TOKEN_REVOKED = 18;
+ */
+ const OAUTH_TOKEN_REVOKED = 18;
+ /**
+ * Oauth token HTTP header is malformed.
+ *
+ * Generated from protobuf enum OAUTH_TOKEN_HEADER_INVALID = 19;
+ */
+ const OAUTH_TOKEN_HEADER_INVALID = 19;
+ /**
+ * Login cookie is not valid.
+ *
+ * Generated from protobuf enum LOGIN_COOKIE_INVALID = 20;
+ */
+ const LOGIN_COOKIE_INVALID = 20;
+ /**
+ * Failed to decrypt the login cookie.
+ *
+ * Generated from protobuf enum FAILED_TO_RETRIEVE_LOGIN_COOKIE = 21;
+ */
+ const FAILED_TO_RETRIEVE_LOGIN_COOKIE = 21;
+ /**
+ * User Id in the header is not a valid id.
+ *
+ * Generated from protobuf enum USER_ID_INVALID = 22;
+ */
+ const USER_ID_INVALID = 22;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/AuthorizationErrorEnum.php b/src/Google/Ads/GoogleAds/V0/Errors/AuthorizationErrorEnum.php
new file mode 100644
index 000000000..d966df87e
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/AuthorizationErrorEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.errors.AuthorizationErrorEnum
+ */
+class AuthorizationErrorEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Errors\AuthorizationError::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/AuthorizationErrorEnum_AuthorizationError.php b/src/Google/Ads/GoogleAds/V0/Errors/AuthorizationErrorEnum_AuthorizationError.php
new file mode 100644
index 000000000..43cff2771
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/AuthorizationErrorEnum_AuthorizationError.php
@@ -0,0 +1,58 @@
+Google\Ads\Googleads\V0\Errors\AuthorizationErrorEnum\AuthorizationError
+ */
+class AuthorizationErrorEnum_AuthorizationError
+{
+ /**
+ * Enum unspecified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * The received error code is not known in this version.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * User doesn't have permission to access customer.
+ *
+ * Generated from protobuf enum USER_PERMISSION_DENIED = 2;
+ */
+ const USER_PERMISSION_DENIED = 2;
+ /**
+ * The developer token is not whitelisted.
+ *
+ * Generated from protobuf enum DEVELOPER_TOKEN_NOT_WHITELISTED = 3;
+ */
+ const DEVELOPER_TOKEN_NOT_WHITELISTED = 3;
+ /**
+ * The developer token is not allowed with the project sent in the request.
+ *
+ * Generated from protobuf enum DEVELOPER_TOKEN_PROHIBITED = 4;
+ */
+ const DEVELOPER_TOKEN_PROHIBITED = 4;
+ /**
+ * The Google Cloud project sent in the request does not have permission to
+ * access the api.
+ *
+ * Generated from protobuf enum PROJECT_DISABLED = 5;
+ */
+ const PROJECT_DISABLED = 5;
+ /**
+ * Authorization of the client failed.
+ *
+ * Generated from protobuf enum AUTHORIZATION_ERROR = 6;
+ */
+ const AUTHORIZATION_ERROR = 6;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/BiddingErrorEnum.php b/src/Google/Ads/GoogleAds/V0/Errors/BiddingErrorEnum.php
new file mode 100644
index 000000000..b9b180891
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/BiddingErrorEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.errors.BiddingErrorEnum
+ */
+class BiddingErrorEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Errors\BiddingError::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/BiddingErrorEnum_BiddingError.php b/src/Google/Ads/GoogleAds/V0/Errors/BiddingErrorEnum_BiddingError.php
new file mode 100644
index 000000000..5a8dbcbc7
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/BiddingErrorEnum_BiddingError.php
@@ -0,0 +1,152 @@
+Google\Ads\Googleads\V0\Errors\BiddingErrorEnum\BiddingError
+ */
+class BiddingErrorEnum_BiddingError
+{
+ /**
+ * Enum unspecified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * The received error code is not known in this version.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * Cannot transition to new bidding strategy.
+ *
+ * Generated from protobuf enum BIDDING_STRATEGY_TRANSITION_NOT_ALLOWED = 2;
+ */
+ const BIDDING_STRATEGY_TRANSITION_NOT_ALLOWED = 2;
+ /**
+ * Cannot attach bidding strategy to campaign.
+ *
+ * Generated from protobuf enum CANNOT_ATTACH_BIDDING_STRATEGY_TO_CAMPAIGN = 7;
+ */
+ const CANNOT_ATTACH_BIDDING_STRATEGY_TO_CAMPAIGN = 7;
+ /**
+ * Bidding strategy is not supported or cannot be used as anonymous.
+ *
+ * Generated from protobuf enum INVALID_ANONYMOUS_BIDDING_STRATEGY_TYPE = 10;
+ */
+ const INVALID_ANONYMOUS_BIDDING_STRATEGY_TYPE = 10;
+ /**
+ * The type does not match the named strategy's type.
+ *
+ * Generated from protobuf enum INVALID_BIDDING_STRATEGY_TYPE = 14;
+ */
+ const INVALID_BIDDING_STRATEGY_TYPE = 14;
+ /**
+ * The bid is invalid.
+ *
+ * Generated from protobuf enum INVALID_BID = 17;
+ */
+ const INVALID_BID = 17;
+ /**
+ * Bidding strategy is not available for the account type.
+ *
+ * Generated from protobuf enum BIDDING_STRATEGY_NOT_AVAILABLE_FOR_ACCOUNT_TYPE = 18;
+ */
+ const BIDDING_STRATEGY_NOT_AVAILABLE_FOR_ACCOUNT_TYPE = 18;
+ /**
+ * Conversion tracking is not enabled for the campaign for VBB transition.
+ *
+ * Generated from protobuf enum CONVERSION_TRACKING_NOT_ENABLED = 19;
+ */
+ const CONVERSION_TRACKING_NOT_ENABLED = 19;
+ /**
+ * Not enough conversions tracked for VBB transitions.
+ *
+ * Generated from protobuf enum NOT_ENOUGH_CONVERSIONS = 20;
+ */
+ const NOT_ENOUGH_CONVERSIONS = 20;
+ /**
+ * Campaign can not be created with given bidding strategy. It can be
+ * transitioned to the strategy, once eligible.
+ *
+ * Generated from protobuf enum CANNOT_CREATE_CAMPAIGN_WITH_BIDDING_STRATEGY = 21;
+ */
+ const CANNOT_CREATE_CAMPAIGN_WITH_BIDDING_STRATEGY = 21;
+ /**
+ * Cannot target content network only as campaign uses Page One Promoted
+ * bidding strategy.
+ *
+ * Generated from protobuf enum CANNOT_TARGET_CONTENT_NETWORK_ONLY_WITH_CAMPAIGN_LEVEL_POP_BIDDING_STRATEGY = 23;
+ */
+ const CANNOT_TARGET_CONTENT_NETWORK_ONLY_WITH_CAMPAIGN_LEVEL_POP_BIDDING_STRATEGY = 23;
+ /**
+ * Budget Optimizer and Target Spend bidding strategies are not supported
+ * for campaigns with AdSchedule targeting.
+ *
+ * Generated from protobuf enum BIDDING_STRATEGY_NOT_SUPPORTED_WITH_AD_SCHEDULE = 24;
+ */
+ const BIDDING_STRATEGY_NOT_SUPPORTED_WITH_AD_SCHEDULE = 24;
+ /**
+ * Pay per conversion is not available to all the customer, only few
+ * whitelisted customers can use this.
+ *
+ * Generated from protobuf enum PAY_PER_CONVERSION_NOT_AVAILABLE_FOR_CUSTOMER = 25;
+ */
+ const PAY_PER_CONVERSION_NOT_AVAILABLE_FOR_CUSTOMER = 25;
+ /**
+ * Pay per conversion is not allowed with Target CPA.
+ *
+ * Generated from protobuf enum PAY_PER_CONVERSION_NOT_ALLOWED_WITH_TARGET_CPA = 26;
+ */
+ const PAY_PER_CONVERSION_NOT_ALLOWED_WITH_TARGET_CPA = 26;
+ /**
+ * Cannot set bidding strategy to Manual CPM for search network only
+ * campaigns.
+ *
+ * Generated from protobuf enum BIDDING_STRATEGY_NOT_ALLOWED_FOR_SEARCH_ONLY_CAMPAIGNS = 27;
+ */
+ const BIDDING_STRATEGY_NOT_ALLOWED_FOR_SEARCH_ONLY_CAMPAIGNS = 27;
+ /**
+ * The bidding strategy is not supported for use in drafts or experiments.
+ *
+ * Generated from protobuf enum BIDDING_STRATEGY_NOT_SUPPORTED_IN_DRAFTS_OR_EXPERIMENTS = 28;
+ */
+ const BIDDING_STRATEGY_NOT_SUPPORTED_IN_DRAFTS_OR_EXPERIMENTS = 28;
+ /**
+ * Bidding strategy type does not support product type ad group criterion.
+ *
+ * Generated from protobuf enum BIDDING_STRATEGY_TYPE_DOES_NOT_SUPPORT_PRODUCT_TYPE_ADGROUP_CRITERION = 29;
+ */
+ const BIDDING_STRATEGY_TYPE_DOES_NOT_SUPPORT_PRODUCT_TYPE_ADGROUP_CRITERION = 29;
+ /**
+ * Bid amount is too small.
+ *
+ * Generated from protobuf enum BID_TOO_SMALL = 30;
+ */
+ const BID_TOO_SMALL = 30;
+ /**
+ * Bid amount is too big.
+ *
+ * Generated from protobuf enum BID_TOO_BIG = 31;
+ */
+ const BID_TOO_BIG = 31;
+ /**
+ * Bid has too many fractional digit precision.
+ *
+ * Generated from protobuf enum BID_TOO_MANY_FRACTIONAL_DIGITS = 32;
+ */
+ const BID_TOO_MANY_FRACTIONAL_DIGITS = 32;
+ /**
+ * Invalid domain name specified.
+ *
+ * Generated from protobuf enum INVALID_DOMAIN_NAME = 33;
+ */
+ const INVALID_DOMAIN_NAME = 33;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/BiddingStrategyErrorEnum.php b/src/Google/Ads/GoogleAds/V0/Errors/BiddingStrategyErrorEnum.php
new file mode 100644
index 000000000..92ae77e6c
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/BiddingStrategyErrorEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.errors.BiddingStrategyErrorEnum
+ */
+class BiddingStrategyErrorEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Errors\BiddingStrategyError::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/BiddingStrategyErrorEnum_BiddingStrategyError.php b/src/Google/Ads/GoogleAds/V0/Errors/BiddingStrategyErrorEnum_BiddingStrategyError.php
new file mode 100644
index 000000000..8404fc6bf
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/BiddingStrategyErrorEnum_BiddingStrategyError.php
@@ -0,0 +1,52 @@
+Google\Ads\Googleads\V0\Errors\BiddingStrategyErrorEnum\BiddingStrategyError
+ */
+class BiddingStrategyErrorEnum_BiddingStrategyError
+{
+ /**
+ * Enum unspecified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * The received error code is not known in this version.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * Each bidding strategy must have a unique name.
+ *
+ * Generated from protobuf enum DUPLICATE_NAME = 2;
+ */
+ const DUPLICATE_NAME = 2;
+ /**
+ * Bidding strategy type is immutable.
+ *
+ * Generated from protobuf enum CANNOT_CHANGE_BIDDING_STRATEGY_TYPE = 3;
+ */
+ const CANNOT_CHANGE_BIDDING_STRATEGY_TYPE = 3;
+ /**
+ * Only bidding strategies not linked to campaigns, adgroups or adgroup
+ * criteria can be removed.
+ *
+ * Generated from protobuf enum CANNOT_REMOVE_ASSOCIATED_STRATEGY = 4;
+ */
+ const CANNOT_REMOVE_ASSOCIATED_STRATEGY = 4;
+ /**
+ * The specified bidding strategy is not supported.
+ *
+ * Generated from protobuf enum BIDDING_STRATEGY_NOT_SUPPORTED = 5;
+ */
+ const BIDDING_STRATEGY_NOT_SUPPORTED = 5;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/CampaignBudgetErrorEnum.php b/src/Google/Ads/GoogleAds/V0/Errors/CampaignBudgetErrorEnum.php
new file mode 100644
index 000000000..e94630a0a
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/CampaignBudgetErrorEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.errors.CampaignBudgetErrorEnum
+ */
+class CampaignBudgetErrorEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Errors\CampaignBudgetError::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/CampaignBudgetErrorEnum_CampaignBudgetError.php b/src/Google/Ads/GoogleAds/V0/Errors/CampaignBudgetErrorEnum_CampaignBudgetError.php
new file mode 100644
index 000000000..10631f8fc
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/CampaignBudgetErrorEnum_CampaignBudgetError.php
@@ -0,0 +1,116 @@
+Google\Ads\Googleads\V0\Errors\CampaignBudgetErrorEnum\CampaignBudgetError
+ */
+class CampaignBudgetErrorEnum_CampaignBudgetError
+{
+ /**
+ * Enum unspecified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * The received error code is not known in this version.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * The requested campaign budget no longer exists.
+ *
+ * Generated from protobuf enum CAMPAIGN_BUDGET_REMOVED = 2;
+ */
+ const CAMPAIGN_BUDGET_REMOVED = 2;
+ /**
+ * The campaign budget is associated with at least one campaign, and so the
+ * campaign budget cannot be removed.
+ *
+ * Generated from protobuf enum CAMPAIGN_BUDGET_IN_USE = 3;
+ */
+ const CAMPAIGN_BUDGET_IN_USE = 3;
+ /**
+ * Customer is not whitelisted for this campaign budget period.
+ *
+ * Generated from protobuf enum CAMPAIGN_BUDGET_PERIOD_NOT_AVAILABLE = 4;
+ */
+ const CAMPAIGN_BUDGET_PERIOD_NOT_AVAILABLE = 4;
+ /**
+ * This field is not mutable on implicitly shared campaign budgets
+ *
+ * Generated from protobuf enum CANNOT_MODIFY_FIELD_OF_IMPLICITLY_SHARED_CAMPAIGN_BUDGET = 6;
+ */
+ const CANNOT_MODIFY_FIELD_OF_IMPLICITLY_SHARED_CAMPAIGN_BUDGET = 6;
+ /**
+ * Cannot change explicitly shared campaign budgets back to implicitly
+ * shared ones.
+ *
+ * Generated from protobuf enum CANNOT_UPDATE_CAMPAIGN_BUDGET_TO_IMPLICITLY_SHARED = 7;
+ */
+ const CANNOT_UPDATE_CAMPAIGN_BUDGET_TO_IMPLICITLY_SHARED = 7;
+ /**
+ * An implicit campaign budget without a name cannot be changed to
+ * explicitly shared campaign budget.
+ *
+ * Generated from protobuf enum CANNOT_UPDATE_CAMPAIGN_BUDGET_TO_EXPLICITLY_SHARED_WITHOUT_NAME = 8;
+ */
+ const CANNOT_UPDATE_CAMPAIGN_BUDGET_TO_EXPLICITLY_SHARED_WITHOUT_NAME = 8;
+ /**
+ * Cannot change an implicitly shared campaign budget to an explicitly
+ * shared one.
+ *
+ * Generated from protobuf enum CANNOT_UPDATE_CAMPAIGN_BUDGET_TO_EXPLICITLY_SHARED = 9;
+ */
+ const CANNOT_UPDATE_CAMPAIGN_BUDGET_TO_EXPLICITLY_SHARED = 9;
+ /**
+ * Only explicitly shared campaign budgets can be used with multiple
+ * campaigns.
+ *
+ * Generated from protobuf enum CANNOT_USE_IMPLICITLY_SHARED_CAMPAIGN_BUDGET_WITH_MULTIPLE_CAMPAIGNS = 10;
+ */
+ const CANNOT_USE_IMPLICITLY_SHARED_CAMPAIGN_BUDGET_WITH_MULTIPLE_CAMPAIGNS = 10;
+ /**
+ * A campaign budget with this name already exists.
+ *
+ * Generated from protobuf enum DUPLICATE_NAME = 11;
+ */
+ const DUPLICATE_NAME = 11;
+ /**
+ * A money amount was not in the expected currency.
+ *
+ * Generated from protobuf enum MONEY_AMOUNT_IN_WRONG_CURRENCY = 12;
+ */
+ const MONEY_AMOUNT_IN_WRONG_CURRENCY = 12;
+ /**
+ * A money amount was less than the minimum CPC for currency.
+ *
+ * Generated from protobuf enum MONEY_AMOUNT_LESS_THAN_CURRENCY_MINIMUM_CPC = 13;
+ */
+ const MONEY_AMOUNT_LESS_THAN_CURRENCY_MINIMUM_CPC = 13;
+ /**
+ * A money amount was greater than the maximum allowed.
+ *
+ * Generated from protobuf enum MONEY_AMOUNT_TOO_LARGE = 14;
+ */
+ const MONEY_AMOUNT_TOO_LARGE = 14;
+ /**
+ * A money amount was negative.
+ *
+ * Generated from protobuf enum NEGATIVE_MONEY_AMOUNT = 15;
+ */
+ const NEGATIVE_MONEY_AMOUNT = 15;
+ /**
+ * A money amount was not a multiple of a minimum unit.
+ *
+ * Generated from protobuf enum NON_MULTIPLE_OF_MINIMUM_CURRENCY_UNIT = 16;
+ */
+ const NON_MULTIPLE_OF_MINIMUM_CURRENCY_UNIT = 16;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/CampaignCriterionErrorEnum.php b/src/Google/Ads/GoogleAds/V0/Errors/CampaignCriterionErrorEnum.php
new file mode 100644
index 000000000..4259a64ab
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/CampaignCriterionErrorEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.errors.CampaignCriterionErrorEnum
+ */
+class CampaignCriterionErrorEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Errors\CampaignCriterionError::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/CampaignCriterionErrorEnum_CampaignCriterionError.php b/src/Google/Ads/GoogleAds/V0/Errors/CampaignCriterionErrorEnum_CampaignCriterionError.php
new file mode 100644
index 000000000..aee05be98
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/CampaignCriterionErrorEnum_CampaignCriterionError.php
@@ -0,0 +1,91 @@
+Google\Ads\Googleads\V0\Errors\CampaignCriterionErrorEnum\CampaignCriterionError
+ */
+class CampaignCriterionErrorEnum_CampaignCriterionError
+{
+ /**
+ * Enum unspecified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * The received error code is not known in this version.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * Concrete type of criterion (keyword v.s. placement) is required for
+ * CREATE and UPDATE operations.
+ *
+ * Generated from protobuf enum CONCRETE_TYPE_REQUIRED = 2;
+ */
+ const CONCRETE_TYPE_REQUIRED = 2;
+ /**
+ * Invalid placement URL.
+ *
+ * Generated from protobuf enum INVALID_PLACEMENT_URL = 3;
+ */
+ const INVALID_PLACEMENT_URL = 3;
+ /**
+ * Criteria type can not be excluded for the campaign by the customer. like
+ * AOL account type cannot target site type criteria
+ *
+ * Generated from protobuf enum CANNOT_EXCLUDE_CRITERIA_TYPE = 4;
+ */
+ const CANNOT_EXCLUDE_CRITERIA_TYPE = 4;
+ /**
+ * Cannot set the campaign criterion status for this criteria type.
+ *
+ * Generated from protobuf enum CANNOT_SET_STATUS_FOR_CRITERIA_TYPE = 5;
+ */
+ const CANNOT_SET_STATUS_FOR_CRITERIA_TYPE = 5;
+ /**
+ * Cannot set the campaign criterion status for an excluded criteria.
+ *
+ * Generated from protobuf enum CANNOT_SET_STATUS_FOR_EXCLUDED_CRITERIA = 6;
+ */
+ const CANNOT_SET_STATUS_FOR_EXCLUDED_CRITERIA = 6;
+ /**
+ * Cannot target and exclude the same criterion.
+ *
+ * Generated from protobuf enum CANNOT_TARGET_AND_EXCLUDE = 7;
+ */
+ const CANNOT_TARGET_AND_EXCLUDE = 7;
+ /**
+ * The mutate contained too many operations.
+ *
+ * Generated from protobuf enum TOO_MANY_OPERATIONS = 8;
+ */
+ const TOO_MANY_OPERATIONS = 8;
+ /**
+ * This operator cannot be applied to a criterion of this type.
+ *
+ * Generated from protobuf enum OPERATOR_NOT_SUPPORTED_FOR_CRITERION_TYPE = 9;
+ */
+ const OPERATOR_NOT_SUPPORTED_FOR_CRITERION_TYPE = 9;
+ /**
+ * The Shopping campaign sales country is not supported for
+ * ProductSalesChannel targeting.
+ *
+ * Generated from protobuf enum SHOPPING_CAMPAIGN_SALES_COUNTRY_NOT_SUPPORTED_FOR_SALES_CHANNEL = 10;
+ */
+ const SHOPPING_CAMPAIGN_SALES_COUNTRY_NOT_SUPPORTED_FOR_SALES_CHANNEL = 10;
+ /**
+ * The existing field can't be updated with CREATE operation. It can be
+ * updated with UPDATE operation only.
+ *
+ * Generated from protobuf enum CANNOT_ADD_EXISTING_FIELD = 11;
+ */
+ const CANNOT_ADD_EXISTING_FIELD = 11;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/CampaignErrorEnum.php b/src/Google/Ads/GoogleAds/V0/Errors/CampaignErrorEnum.php
new file mode 100644
index 000000000..feb627bac
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/CampaignErrorEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.errors.CampaignErrorEnum
+ */
+class CampaignErrorEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Errors\CampaignError::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/CampaignErrorEnum_CampaignError.php b/src/Google/Ads/GoogleAds/V0/Errors/CampaignErrorEnum_CampaignError.php
new file mode 100644
index 000000000..e7d76bbf1
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/CampaignErrorEnum_CampaignError.php
@@ -0,0 +1,261 @@
+Google\Ads\Googleads\V0\Errors\CampaignErrorEnum\CampaignError
+ */
+class CampaignErrorEnum_CampaignError
+{
+ /**
+ * Enum unspecified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * The received error code is not known in this version.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * Cannot target content network.
+ *
+ * Generated from protobuf enum CANNOT_TARGET_CONTENT_NETWORK = 3;
+ */
+ const CANNOT_TARGET_CONTENT_NETWORK = 3;
+ /**
+ * Cannot target search network.
+ *
+ * Generated from protobuf enum CANNOT_TARGET_SEARCH_NETWORK = 4;
+ */
+ const CANNOT_TARGET_SEARCH_NETWORK = 4;
+ /**
+ * Cannot cover search network without google search network.
+ *
+ * Generated from protobuf enum CANNOT_TARGET_SEARCH_NETWORK_WITHOUT_GOOGLE_SEARCH = 5;
+ */
+ const CANNOT_TARGET_SEARCH_NETWORK_WITHOUT_GOOGLE_SEARCH = 5;
+ /**
+ * Cannot target Google Search network for a CPM campaign.
+ *
+ * Generated from protobuf enum CANNOT_TARGET_GOOGLE_SEARCH_FOR_CPM_CAMPAIGN = 6;
+ */
+ const CANNOT_TARGET_GOOGLE_SEARCH_FOR_CPM_CAMPAIGN = 6;
+ /**
+ * Must target at least one network.
+ *
+ * Generated from protobuf enum CAMPAIGN_MUST_TARGET_AT_LEAST_ONE_NETWORK = 7;
+ */
+ const CAMPAIGN_MUST_TARGET_AT_LEAST_ONE_NETWORK = 7;
+ /**
+ * Only some Google partners are allowed to target partner search network.
+ *
+ * Generated from protobuf enum CANNOT_TARGET_PARTNER_SEARCH_NETWORK = 8;
+ */
+ const CANNOT_TARGET_PARTNER_SEARCH_NETWORK = 8;
+ /**
+ * Cannot target content network only as campaign has criteria-level bidding
+ * strategy.
+ *
+ * Generated from protobuf enum CANNOT_TARGET_CONTENT_NETWORK_ONLY_WITH_CRITERIA_LEVEL_BIDDING_STRATEGY = 9;
+ */
+ const CANNOT_TARGET_CONTENT_NETWORK_ONLY_WITH_CRITERIA_LEVEL_BIDDING_STRATEGY = 9;
+ /**
+ * Cannot modify the start or end date such that the campaign duration would
+ * not contain the durations of all runnable trials.
+ *
+ * Generated from protobuf enum CAMPAIGN_DURATION_MUST_CONTAIN_ALL_RUNNABLE_TRIALS = 10;
+ */
+ const CAMPAIGN_DURATION_MUST_CONTAIN_ALL_RUNNABLE_TRIALS = 10;
+ /**
+ * Cannot modify dates, budget or campaign name of a trial campaign.
+ *
+ * Generated from protobuf enum CANNOT_MODIFY_FOR_TRIAL_CAMPAIGN = 11;
+ */
+ const CANNOT_MODIFY_FOR_TRIAL_CAMPAIGN = 11;
+ /**
+ * Trying to modify the name of an active or paused campaign, where the name
+ * is already assigned to another active or paused campaign.
+ *
+ * Generated from protobuf enum DUPLICATE_CAMPAIGN_NAME = 12;
+ */
+ const DUPLICATE_CAMPAIGN_NAME = 12;
+ /**
+ * Two fields are in conflicting modes.
+ *
+ * Generated from protobuf enum INCOMPATIBLE_CAMPAIGN_FIELD = 13;
+ */
+ const INCOMPATIBLE_CAMPAIGN_FIELD = 13;
+ /**
+ * Campaign name cannot be used.
+ *
+ * Generated from protobuf enum INVALID_CAMPAIGN_NAME = 14;
+ */
+ const INVALID_CAMPAIGN_NAME = 14;
+ /**
+ * Given status is invalid.
+ *
+ * Generated from protobuf enum INVALID_AD_SERVING_OPTIMIZATION_STATUS = 15;
+ */
+ const INVALID_AD_SERVING_OPTIMIZATION_STATUS = 15;
+ /**
+ * Error in the campaign level tracking url.
+ *
+ * Generated from protobuf enum INVALID_TRACKING_URL = 16;
+ */
+ const INVALID_TRACKING_URL = 16;
+ /**
+ * Cannot set both tracking url template and tracking setting. An user has
+ * to clear legacy tracking setting in order to add tracking url template.
+ *
+ * Generated from protobuf enum CANNOT_SET_BOTH_TRACKING_URL_TEMPLATE_AND_TRACKING_SETTING = 17;
+ */
+ const CANNOT_SET_BOTH_TRACKING_URL_TEMPLATE_AND_TRACKING_SETTING = 17;
+ /**
+ * The maximum number of impressions for Frequency Cap should be an integer
+ * greater than 0.
+ *
+ * Generated from protobuf enum MAX_IMPRESSIONS_NOT_IN_RANGE = 18;
+ */
+ const MAX_IMPRESSIONS_NOT_IN_RANGE = 18;
+ /**
+ * Only the Day, Week and Month time units are supported.
+ *
+ * Generated from protobuf enum TIME_UNIT_NOT_SUPPORTED = 19;
+ */
+ const TIME_UNIT_NOT_SUPPORTED = 19;
+ /**
+ * Operation not allowed on a campaign whose serving status has ended
+ *
+ * Generated from protobuf enum INVALID_OPERATION_IF_SERVING_STATUS_HAS_ENDED = 20;
+ */
+ const INVALID_OPERATION_IF_SERVING_STATUS_HAS_ENDED = 20;
+ /**
+ * This budget is exclusively linked to a Campaign that is using experiments
+ * so it cannot be shared.
+ *
+ * Generated from protobuf enum BUDGET_CANNOT_BE_SHARED = 21;
+ */
+ const BUDGET_CANNOT_BE_SHARED = 21;
+ /**
+ * Campaigns using experiments cannot use a shared budget.
+ *
+ * Generated from protobuf enum CAMPAIGN_CANNOT_USE_SHARED_BUDGET = 22;
+ */
+ const CAMPAIGN_CANNOT_USE_SHARED_BUDGET = 22;
+ /**
+ * A different budget cannot be assigned to a campaign when there are
+ * running or scheduled trials.
+ *
+ * Generated from protobuf enum CANNOT_CHANGE_BUDGET_ON_CAMPAIGN_WITH_TRIALS = 23;
+ */
+ const CANNOT_CHANGE_BUDGET_ON_CAMPAIGN_WITH_TRIALS = 23;
+ /**
+ * No link found between the campaign and the label.
+ *
+ * Generated from protobuf enum CAMPAIGN_LABEL_DOES_NOT_EXIST = 24;
+ */
+ const CAMPAIGN_LABEL_DOES_NOT_EXIST = 24;
+ /**
+ * The label has already been attached to the campaign.
+ *
+ * Generated from protobuf enum CAMPAIGN_LABEL_ALREADY_EXISTS = 25;
+ */
+ const CAMPAIGN_LABEL_ALREADY_EXISTS = 25;
+ /**
+ * A ShoppingSetting was not found when creating a shopping campaign.
+ *
+ * Generated from protobuf enum MISSING_SHOPPING_SETTING = 26;
+ */
+ const MISSING_SHOPPING_SETTING = 26;
+ /**
+ * The country in shopping setting is not an allowed country.
+ *
+ * Generated from protobuf enum INVALID_SHOPPING_SALES_COUNTRY = 27;
+ */
+ const INVALID_SHOPPING_SALES_COUNTRY = 27;
+ /**
+ * Shopping merchant is not enabled for Purchases on Google.
+ *
+ * Generated from protobuf enum SHOPPING_MERCHANT_NOT_ALLOWED_FOR_PURCHASES_ON_GOOGLE = 28;
+ */
+ const SHOPPING_MERCHANT_NOT_ALLOWED_FOR_PURCHASES_ON_GOOGLE = 28;
+ /**
+ * Purchases on Google not enabled for the shopping campaign's sales
+ * country.
+ *
+ * Generated from protobuf enum PURCHASES_ON_GOOGLE_NOT_SUPPORTED_FOR_SHOPPING_SALES_COUNTRY = 29;
+ */
+ const PURCHASES_ON_GOOGLE_NOT_SUPPORTED_FOR_SHOPPING_SALES_COUNTRY = 29;
+ /**
+ * A Campaign with channel sub type UNIVERSAL_APP_CAMPAIGN must have a
+ * UniversalAppCampaignSetting specified.
+ *
+ * Generated from protobuf enum MISSING_UNIVERSAL_APP_CAMPAIGN_SETTING = 30;
+ */
+ const MISSING_UNIVERSAL_APP_CAMPAIGN_SETTING = 30;
+ /**
+ * The requested channel type is not available according to the customer's
+ * account setting.
+ *
+ * Generated from protobuf enum ADVERTISING_CHANNEL_TYPE_NOT_AVAILABLE_FOR_ACCOUNT_TYPE = 31;
+ */
+ const ADVERTISING_CHANNEL_TYPE_NOT_AVAILABLE_FOR_ACCOUNT_TYPE = 31;
+ /**
+ * The AdvertisingChannelSubType is not a valid subtype of the primary
+ * channel type.
+ *
+ * Generated from protobuf enum INVALID_ADVERTISING_CHANNEL_SUB_TYPE = 32;
+ */
+ const INVALID_ADVERTISING_CHANNEL_SUB_TYPE = 32;
+ /**
+ * At least one conversion must be selected.
+ *
+ * Generated from protobuf enum AT_LEAST_ONE_CONVERSION_MUST_BE_SELECTED = 33;
+ */
+ const AT_LEAST_ONE_CONVERSION_MUST_BE_SELECTED = 33;
+ /**
+ * Setting ad rotation mode for a campaign is not allowed. Ad rotation mode
+ * at campaign is deprecated.
+ *
+ * Generated from protobuf enum CANNOT_SET_AD_ROTATION_MODE = 34;
+ */
+ const CANNOT_SET_AD_ROTATION_MODE = 34;
+ /**
+ * Trying to change start date on a campaign that has started.
+ *
+ * Generated from protobuf enum CANNOT_MODIFY_START_DATE_IF_ALREADY_STARTED = 35;
+ */
+ const CANNOT_MODIFY_START_DATE_IF_ALREADY_STARTED = 35;
+ /**
+ * Trying to modify a date into the past.
+ *
+ * Generated from protobuf enum CANNOT_SET_DATE_TO_PAST = 36;
+ */
+ const CANNOT_SET_DATE_TO_PAST = 36;
+ /**
+ * Hotel center id in the hotel setting does not match any customer links.
+ *
+ * Generated from protobuf enum MISSING_HOTEL_CUSTOMER_LINK = 37;
+ */
+ const MISSING_HOTEL_CUSTOMER_LINK = 37;
+ /**
+ * Hotel center id in the hotel setting must match an active customer link.
+ *
+ * Generated from protobuf enum INVALID_HOTEL_CUSTOMER_LINK = 38;
+ */
+ const INVALID_HOTEL_CUSTOMER_LINK = 38;
+ /**
+ * Hotel setting was not found when creating a hotel ads campaign.
+ *
+ * Generated from protobuf enum MISSING_HOTEL_SETTING = 39;
+ */
+ const MISSING_HOTEL_SETTING = 39;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/CollectionSizeErrorEnum.php b/src/Google/Ads/GoogleAds/V0/Errors/CollectionSizeErrorEnum.php
new file mode 100644
index 000000000..fb7a21bf7
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/CollectionSizeErrorEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.errors.CollectionSizeErrorEnum
+ */
+class CollectionSizeErrorEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Errors\CollectionSizeError::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/CollectionSizeErrorEnum_CollectionSizeError.php b/src/Google/Ads/GoogleAds/V0/Errors/CollectionSizeErrorEnum_CollectionSizeError.php
new file mode 100644
index 000000000..c0f37fbc3
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/CollectionSizeErrorEnum_CollectionSizeError.php
@@ -0,0 +1,39 @@
+Google\Ads\Googleads\V0\Errors\CollectionSizeErrorEnum\CollectionSizeError
+ */
+class CollectionSizeErrorEnum_CollectionSizeError
+{
+ /**
+ * Enum unspecified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * The received error code is not known in this version.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * Too few.
+ *
+ * Generated from protobuf enum TOO_FEW = 2;
+ */
+ const TOO_FEW = 2;
+ /**
+ * Too many.
+ *
+ * Generated from protobuf enum TOO_MANY = 3;
+ */
+ const TOO_MANY = 3;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/ContextErrorEnum.php b/src/Google/Ads/GoogleAds/V0/Errors/ContextErrorEnum.php
new file mode 100644
index 000000000..bcd5aa325
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/ContextErrorEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.errors.ContextErrorEnum
+ */
+class ContextErrorEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Errors\ContextError::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/ContextErrorEnum_ContextError.php b/src/Google/Ads/GoogleAds/V0/Errors/ContextErrorEnum_ContextError.php
new file mode 100644
index 000000000..4e98adc46
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/ContextErrorEnum_ContextError.php
@@ -0,0 +1,33 @@
+Google\Ads\Googleads\V0\Errors\ContextErrorEnum\ContextError
+ */
+class ContextErrorEnum_ContextError
+{
+ /**
+ * Enum unspecified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * The received error code is not known in this version.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * The operation is not allowed for the given context.
+ *
+ * Generated from protobuf enum OPERATION_NOT_PERMITTED_FOR_CONTEXT = 2;
+ */
+ const OPERATION_NOT_PERMITTED_FOR_CONTEXT = 2;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/CriterionErrorEnum.php b/src/Google/Ads/GoogleAds/V0/Errors/CriterionErrorEnum.php
new file mode 100644
index 000000000..15cd84527
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/CriterionErrorEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.errors.CriterionErrorEnum
+ */
+class CriterionErrorEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Errors\CriterionError::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/CriterionErrorEnum_CriterionError.php b/src/Google/Ads/GoogleAds/V0/Errors/CriterionErrorEnum_CriterionError.php
new file mode 100644
index 000000000..1488f4065
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/CriterionErrorEnum_CriterionError.php
@@ -0,0 +1,550 @@
+Google\Ads\Googleads\V0\Errors\CriterionErrorEnum\CriterionError
+ */
+class CriterionErrorEnum_CriterionError
+{
+ /**
+ * Enum unspecified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * The received error code is not known in this version.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * Concrete type of criterion is required for CREATE and UPDATE operations.
+ *
+ * Generated from protobuf enum CONCRETE_TYPE_REQUIRED = 2;
+ */
+ const CONCRETE_TYPE_REQUIRED = 2;
+ /**
+ * The category requested for exclusion is invalid.
+ *
+ * Generated from protobuf enum INVALID_EXCLUDED_CATEGORY = 3;
+ */
+ const INVALID_EXCLUDED_CATEGORY = 3;
+ /**
+ * Invalid keyword criteria text.
+ *
+ * Generated from protobuf enum INVALID_KEYWORD_TEXT = 4;
+ */
+ const INVALID_KEYWORD_TEXT = 4;
+ /**
+ * Keyword text should be less than 80 chars.
+ *
+ * Generated from protobuf enum KEYWORD_TEXT_TOO_LONG = 5;
+ */
+ const KEYWORD_TEXT_TOO_LONG = 5;
+ /**
+ * Keyword text has too many words.
+ *
+ * Generated from protobuf enum KEYWORD_HAS_TOO_MANY_WORDS = 6;
+ */
+ const KEYWORD_HAS_TOO_MANY_WORDS = 6;
+ /**
+ * Keyword text has invalid characters or symbols.
+ *
+ * Generated from protobuf enum KEYWORD_HAS_INVALID_CHARS = 7;
+ */
+ const KEYWORD_HAS_INVALID_CHARS = 7;
+ /**
+ * Invalid placement URL.
+ *
+ * Generated from protobuf enum INVALID_PLACEMENT_URL = 8;
+ */
+ const INVALID_PLACEMENT_URL = 8;
+ /**
+ * Invalid user list criterion.
+ *
+ * Generated from protobuf enum INVALID_USER_LIST = 9;
+ */
+ const INVALID_USER_LIST = 9;
+ /**
+ * Invalid user interest criterion.
+ *
+ * Generated from protobuf enum INVALID_USER_INTEREST = 10;
+ */
+ const INVALID_USER_INTEREST = 10;
+ /**
+ * Placement URL has wrong format.
+ *
+ * Generated from protobuf enum INVALID_FORMAT_FOR_PLACEMENT_URL = 11;
+ */
+ const INVALID_FORMAT_FOR_PLACEMENT_URL = 11;
+ /**
+ * Placement URL is too long.
+ *
+ * Generated from protobuf enum PLACEMENT_URL_IS_TOO_LONG = 12;
+ */
+ const PLACEMENT_URL_IS_TOO_LONG = 12;
+ /**
+ * Indicates the URL contains an illegal character.
+ *
+ * Generated from protobuf enum PLACEMENT_URL_HAS_ILLEGAL_CHAR = 13;
+ */
+ const PLACEMENT_URL_HAS_ILLEGAL_CHAR = 13;
+ /**
+ * Indicates the URL contains multiple comma separated URLs.
+ *
+ * Generated from protobuf enum PLACEMENT_URL_HAS_MULTIPLE_SITES_IN_LINE = 14;
+ */
+ const PLACEMENT_URL_HAS_MULTIPLE_SITES_IN_LINE = 14;
+ /**
+ * Indicates the domain is blacklisted.
+ *
+ * Generated from protobuf enum PLACEMENT_IS_NOT_AVAILABLE_FOR_TARGETING_OR_EXCLUSION = 15;
+ */
+ const PLACEMENT_IS_NOT_AVAILABLE_FOR_TARGETING_OR_EXCLUSION = 15;
+ /**
+ * Invalid vertical path.
+ *
+ * Generated from protobuf enum INVALID_VERTICAL_PATH = 16;
+ */
+ const INVALID_VERTICAL_PATH = 16;
+ /**
+ * The YouTube Channel Id is invalid.
+ *
+ * Generated from protobuf enum INVALID_YOUTUBE_CHANNEL_ID = 17;
+ */
+ const INVALID_YOUTUBE_CHANNEL_ID = 17;
+ /**
+ * The YouTube Video Id is invalid.
+ *
+ * Generated from protobuf enum INVALID_YOUTUBE_VIDEO_ID = 18;
+ */
+ const INVALID_YOUTUBE_VIDEO_ID = 18;
+ /**
+ * Indicates the placement is a YouTube vertical channel, which is no longer
+ * supported.
+ *
+ * Generated from protobuf enum YOUTUBE_VERTICAL_CHANNEL_DEPRECATED = 19;
+ */
+ const YOUTUBE_VERTICAL_CHANNEL_DEPRECATED = 19;
+ /**
+ * Indicates the placement is a YouTube demographic channel, which is no
+ * longer supported.
+ *
+ * Generated from protobuf enum YOUTUBE_DEMOGRAPHIC_CHANNEL_DEPRECATED = 20;
+ */
+ const YOUTUBE_DEMOGRAPHIC_CHANNEL_DEPRECATED = 20;
+ /**
+ * YouTube urls are not supported in Placement criterion. Use YouTubeChannel
+ * and YouTubeVideo criterion instead.
+ *
+ * Generated from protobuf enum YOUTUBE_URL_UNSUPPORTED = 21;
+ */
+ const YOUTUBE_URL_UNSUPPORTED = 21;
+ /**
+ * Criteria type can not be excluded by the customer, like AOL account type
+ * cannot target site type criteria.
+ *
+ * Generated from protobuf enum CANNOT_EXCLUDE_CRITERIA_TYPE = 22;
+ */
+ const CANNOT_EXCLUDE_CRITERIA_TYPE = 22;
+ /**
+ * Criteria type can not be targeted.
+ *
+ * Generated from protobuf enum CANNOT_ADD_CRITERIA_TYPE = 23;
+ */
+ const CANNOT_ADD_CRITERIA_TYPE = 23;
+ /**
+ * Product filter in the product criteria has invalid characters. Operand
+ * and the argument in the filter can not have "==" or "&+".
+ *
+ * Generated from protobuf enum INVALID_PRODUCT_FILTER = 24;
+ */
+ const INVALID_PRODUCT_FILTER = 24;
+ /**
+ * Product filter in the product criteria is translated to a string as
+ * operand1==argument1&+operand2==argument2, maximum allowed length for the
+ * string is 255 chars.
+ *
+ * Generated from protobuf enum PRODUCT_FILTER_TOO_LONG = 25;
+ */
+ const PRODUCT_FILTER_TOO_LONG = 25;
+ /**
+ * Not allowed to exclude similar user list.
+ *
+ * Generated from protobuf enum CANNOT_EXCLUDE_SIMILAR_USER_LIST = 26;
+ */
+ const CANNOT_EXCLUDE_SIMILAR_USER_LIST = 26;
+ /**
+ * Not allowed to target a closed user list.
+ *
+ * Generated from protobuf enum CANNOT_ADD_CLOSED_USER_LIST = 27;
+ */
+ const CANNOT_ADD_CLOSED_USER_LIST = 27;
+ /**
+ * Not allowed to add display only UserLists to search only campaigns.
+ *
+ * Generated from protobuf enum CANNOT_ADD_DISPLAY_ONLY_LISTS_TO_SEARCH_ONLY_CAMPAIGNS = 28;
+ */
+ const CANNOT_ADD_DISPLAY_ONLY_LISTS_TO_SEARCH_ONLY_CAMPAIGNS = 28;
+ /**
+ * Not allowed to add display only UserLists to search plus campaigns.
+ *
+ * Generated from protobuf enum CANNOT_ADD_DISPLAY_ONLY_LISTS_TO_SEARCH_CAMPAIGNS = 29;
+ */
+ const CANNOT_ADD_DISPLAY_ONLY_LISTS_TO_SEARCH_CAMPAIGNS = 29;
+ /**
+ * Not allowed to add display only UserLists to shopping campaigns.
+ *
+ * Generated from protobuf enum CANNOT_ADD_DISPLAY_ONLY_LISTS_TO_SHOPPING_CAMPAIGNS = 30;
+ */
+ const CANNOT_ADD_DISPLAY_ONLY_LISTS_TO_SHOPPING_CAMPAIGNS = 30;
+ /**
+ * Not allowed to add User interests to search only campaigns.
+ *
+ * Generated from protobuf enum CANNOT_ADD_USER_INTERESTS_TO_SEARCH_CAMPAIGNS = 31;
+ */
+ const CANNOT_ADD_USER_INTERESTS_TO_SEARCH_CAMPAIGNS = 31;
+ /**
+ * Not allowed to set bids for this criterion type in search campaigns
+ *
+ * Generated from protobuf enum CANNOT_SET_BIDS_ON_CRITERION_TYPE_IN_SEARCH_CAMPAIGNS = 32;
+ */
+ const CANNOT_SET_BIDS_ON_CRITERION_TYPE_IN_SEARCH_CAMPAIGNS = 32;
+ /**
+ * Final URLs, URL Templates and CustomParameters cannot be set for the
+ * criterion types of Gender, AgeRange, UserList, Placement, MobileApp, and
+ * MobileAppCategory in search campaigns and shopping campaigns.
+ *
+ * Generated from protobuf enum CANNOT_ADD_URLS_TO_CRITERION_TYPE_FOR_CAMPAIGN_TYPE = 33;
+ */
+ const CANNOT_ADD_URLS_TO_CRITERION_TYPE_FOR_CAMPAIGN_TYPE = 33;
+ /**
+ * IP address is not valid.
+ *
+ * Generated from protobuf enum INVALID_IP_ADDRESS = 34;
+ */
+ const INVALID_IP_ADDRESS = 34;
+ /**
+ * IP format is not valid.
+ *
+ * Generated from protobuf enum INVALID_IP_FORMAT = 35;
+ */
+ const INVALID_IP_FORMAT = 35;
+ /**
+ * Mobile application is not valid.
+ *
+ * Generated from protobuf enum INVALID_MOBILE_APP = 36;
+ */
+ const INVALID_MOBILE_APP = 36;
+ /**
+ * Mobile application category is not valid.
+ *
+ * Generated from protobuf enum INVALID_MOBILE_APP_CATEGORY = 37;
+ */
+ const INVALID_MOBILE_APP_CATEGORY = 37;
+ /**
+ * The CriterionId does not exist or is of the incorrect type.
+ *
+ * Generated from protobuf enum INVALID_CRITERION_ID = 38;
+ */
+ const INVALID_CRITERION_ID = 38;
+ /**
+ * The Criterion is not allowed to be targeted.
+ *
+ * Generated from protobuf enum CANNOT_TARGET_CRITERION = 39;
+ */
+ const CANNOT_TARGET_CRITERION = 39;
+ /**
+ * The criterion is not allowed to be targeted as it is deprecated.
+ *
+ * Generated from protobuf enum CANNOT_TARGET_OBSOLETE_CRITERION = 40;
+ */
+ const CANNOT_TARGET_OBSOLETE_CRITERION = 40;
+ /**
+ * The CriterionId is not valid for the type.
+ *
+ * Generated from protobuf enum CRITERION_ID_AND_TYPE_MISMATCH = 41;
+ */
+ const CRITERION_ID_AND_TYPE_MISMATCH = 41;
+ /**
+ * Distance for the radius for the proximity criterion is invalid.
+ *
+ * Generated from protobuf enum INVALID_PROXIMITY_RADIUS = 42;
+ */
+ const INVALID_PROXIMITY_RADIUS = 42;
+ /**
+ * Units for the distance for the radius for the proximity criterion is
+ * invalid.
+ *
+ * Generated from protobuf enum INVALID_PROXIMITY_RADIUS_UNITS = 43;
+ */
+ const INVALID_PROXIMITY_RADIUS_UNITS = 43;
+ /**
+ * Street address is too short.
+ *
+ * Generated from protobuf enum INVALID_STREETADDRESS_LENGTH = 44;
+ */
+ const INVALID_STREETADDRESS_LENGTH = 44;
+ /**
+ * City name in the address is too short.
+ *
+ * Generated from protobuf enum INVALID_CITYNAME_LENGTH = 45;
+ */
+ const INVALID_CITYNAME_LENGTH = 45;
+ /**
+ * Region code in the address is too short.
+ *
+ * Generated from protobuf enum INVALID_REGIONCODE_LENGTH = 46;
+ */
+ const INVALID_REGIONCODE_LENGTH = 46;
+ /**
+ * Region name in the address is not valid.
+ *
+ * Generated from protobuf enum INVALID_REGIONNAME_LENGTH = 47;
+ */
+ const INVALID_REGIONNAME_LENGTH = 47;
+ /**
+ * Postal code in the address is not valid.
+ *
+ * Generated from protobuf enum INVALID_POSTALCODE_LENGTH = 48;
+ */
+ const INVALID_POSTALCODE_LENGTH = 48;
+ /**
+ * Country code in the address is not valid.
+ *
+ * Generated from protobuf enum INVALID_COUNTRY_CODE = 49;
+ */
+ const INVALID_COUNTRY_CODE = 49;
+ /**
+ * Latitude for the GeoPoint is not valid.
+ *
+ * Generated from protobuf enum INVALID_LATITUDE = 50;
+ */
+ const INVALID_LATITUDE = 50;
+ /**
+ * Longitude for the GeoPoint is not valid.
+ *
+ * Generated from protobuf enum INVALID_LONGITUDE = 51;
+ */
+ const INVALID_LONGITUDE = 51;
+ /**
+ * The Proximity input is not valid. Both address and geoPoint cannot be
+ * null.
+ *
+ * Generated from protobuf enum PROXIMITY_GEOPOINT_AND_ADDRESS_BOTH_CANNOT_BE_NULL = 52;
+ */
+ const PROXIMITY_GEOPOINT_AND_ADDRESS_BOTH_CANNOT_BE_NULL = 52;
+ /**
+ * The Proximity address cannot be geocoded to a valid lat/long.
+ *
+ * Generated from protobuf enum INVALID_PROXIMITY_ADDRESS = 53;
+ */
+ const INVALID_PROXIMITY_ADDRESS = 53;
+ /**
+ * User domain name is not valid.
+ *
+ * Generated from protobuf enum INVALID_USER_DOMAIN_NAME = 54;
+ */
+ const INVALID_USER_DOMAIN_NAME = 54;
+ /**
+ * Length of serialized criterion parameter exceeded size limit.
+ *
+ * Generated from protobuf enum CRITERION_PARAMETER_TOO_LONG = 55;
+ */
+ const CRITERION_PARAMETER_TOO_LONG = 55;
+ /**
+ * Time interval in the AdSchedule overlaps with another AdSchedule.
+ *
+ * Generated from protobuf enum AD_SCHEDULE_TIME_INTERVALS_OVERLAP = 56;
+ */
+ const AD_SCHEDULE_TIME_INTERVALS_OVERLAP = 56;
+ /**
+ * AdSchedule time interval cannot span multiple days.
+ *
+ * Generated from protobuf enum AD_SCHEDULE_INTERVAL_CANNOT_SPAN_MULTIPLE_DAYS = 57;
+ */
+ const AD_SCHEDULE_INTERVAL_CANNOT_SPAN_MULTIPLE_DAYS = 57;
+ /**
+ * AdSchedule time interval specified is invalid, endTime cannot be earlier
+ * than startTime.
+ *
+ * Generated from protobuf enum AD_SCHEDULE_INVALID_TIME_INTERVAL = 58;
+ */
+ const AD_SCHEDULE_INVALID_TIME_INTERVAL = 58;
+ /**
+ * The number of AdSchedule entries in a day exceeds the limit.
+ *
+ * Generated from protobuf enum AD_SCHEDULE_EXCEEDED_INTERVALS_PER_DAY_LIMIT = 59;
+ */
+ const AD_SCHEDULE_EXCEEDED_INTERVALS_PER_DAY_LIMIT = 59;
+ /**
+ * CriteriaId does not match the interval of the AdSchedule specified.
+ *
+ * Generated from protobuf enum AD_SCHEDULE_CRITERION_ID_MISMATCHING_FIELDS = 60;
+ */
+ const AD_SCHEDULE_CRITERION_ID_MISMATCHING_FIELDS = 60;
+ /**
+ * Cannot set bid modifier for this criterion type.
+ *
+ * Generated from protobuf enum CANNOT_BID_MODIFY_CRITERION_TYPE = 61;
+ */
+ const CANNOT_BID_MODIFY_CRITERION_TYPE = 61;
+ /**
+ * Cannot bid modify criterion, since it is opted out of the campaign.
+ *
+ * Generated from protobuf enum CANNOT_BID_MODIFY_CRITERION_CAMPAIGN_OPTED_OUT = 62;
+ */
+ const CANNOT_BID_MODIFY_CRITERION_CAMPAIGN_OPTED_OUT = 62;
+ /**
+ * Cannot set bid modifier for a negative criterion.
+ *
+ * Generated from protobuf enum CANNOT_BID_MODIFY_NEGATIVE_CRITERION = 63;
+ */
+ const CANNOT_BID_MODIFY_NEGATIVE_CRITERION = 63;
+ /**
+ * Bid Modifier already exists. Use SET operation to update.
+ *
+ * Generated from protobuf enum BID_MODIFIER_ALREADY_EXISTS = 64;
+ */
+ const BID_MODIFIER_ALREADY_EXISTS = 64;
+ /**
+ * Feed Id is not allowed in these Location Groups.
+ *
+ * Generated from protobuf enum FEED_ID_NOT_ALLOWED = 65;
+ */
+ const FEED_ID_NOT_ALLOWED = 65;
+ /**
+ * The account may not use the requested criteria type. For example, some
+ * accounts are restricted to keywords only.
+ *
+ * Generated from protobuf enum ACCOUNT_INELIGIBLE_FOR_CRITERIA_TYPE = 66;
+ */
+ const ACCOUNT_INELIGIBLE_FOR_CRITERIA_TYPE = 66;
+ /**
+ * The requested criteria type cannot be used with campaign or ad group
+ * bidding strategy.
+ *
+ * Generated from protobuf enum CRITERIA_TYPE_INVALID_FOR_BIDDING_STRATEGY = 67;
+ */
+ const CRITERIA_TYPE_INVALID_FOR_BIDDING_STRATEGY = 67;
+ /**
+ * The Criterion is not allowed to be excluded.
+ *
+ * Generated from protobuf enum CANNOT_EXCLUDE_CRITERION = 68;
+ */
+ const CANNOT_EXCLUDE_CRITERION = 68;
+ /**
+ * The criterion is not allowed to be removed. For example, we cannot remove
+ * any of the platform criterion.
+ *
+ * Generated from protobuf enum CANNOT_REMOVE_CRITERION = 69;
+ */
+ const CANNOT_REMOVE_CRITERION = 69;
+ /**
+ * The combined length of product dimension values of the product scope
+ * criterion is too long.
+ *
+ * Generated from protobuf enum PRODUCT_SCOPE_TOO_LONG = 70;
+ */
+ const PRODUCT_SCOPE_TOO_LONG = 70;
+ /**
+ * Product scope contains too many dimensions.
+ *
+ * Generated from protobuf enum PRODUCT_SCOPE_TOO_MANY_DIMENSIONS = 71;
+ */
+ const PRODUCT_SCOPE_TOO_MANY_DIMENSIONS = 71;
+ /**
+ * The combined length of product dimension values of the product partition
+ * criterion is too long.
+ *
+ * Generated from protobuf enum PRODUCT_PARTITION_TOO_LONG = 72;
+ */
+ const PRODUCT_PARTITION_TOO_LONG = 72;
+ /**
+ * Product partition contains too many dimensions.
+ *
+ * Generated from protobuf enum PRODUCT_PARTITION_TOO_MANY_DIMENSIONS = 73;
+ */
+ const PRODUCT_PARTITION_TOO_MANY_DIMENSIONS = 73;
+ /**
+ * The product dimension is invalid (e.g. dimension contains illegal value,
+ * dimension type is represented with wrong class, etc). Product dimension
+ * value can not contain "==" or "&+".
+ *
+ * Generated from protobuf enum INVALID_PRODUCT_DIMENSION = 74;
+ */
+ const INVALID_PRODUCT_DIMENSION = 74;
+ /**
+ * Product dimension type is either invalid for campaigns of this type or
+ * cannot be used in the current context. BIDDING_CATEGORY_Lx and
+ * PRODUCT_TYPE_Lx product dimensions must be used in ascending order of
+ * their levels: L1, L2, L3, L4, L5... The levels must be specified
+ * sequentially and start from L1. Furthermore, an "others" product
+ * partition cannot be subdivided with a dimension of the same type but of a
+ * higher level ("others" BIDDING_CATEGORY_L3 can be subdivided with BRAND
+ * but not with BIDDING_CATEGORY_L4).
+ *
+ * Generated from protobuf enum INVALID_PRODUCT_DIMENSION_TYPE = 75;
+ */
+ const INVALID_PRODUCT_DIMENSION_TYPE = 75;
+ /**
+ * Bidding categories do not form a valid path in the Shopping bidding
+ * category taxonomy.
+ *
+ * Generated from protobuf enum INVALID_PRODUCT_BIDDING_CATEGORY = 76;
+ */
+ const INVALID_PRODUCT_BIDDING_CATEGORY = 76;
+ /**
+ * ShoppingSetting must be added to the campaign before ProductScope
+ * criteria can be added.
+ *
+ * Generated from protobuf enum MISSING_SHOPPING_SETTING = 77;
+ */
+ const MISSING_SHOPPING_SETTING = 77;
+ /**
+ * Matching function is invalid.
+ *
+ * Generated from protobuf enum INVALID_MATCHING_FUNCTION = 78;
+ */
+ const INVALID_MATCHING_FUNCTION = 78;
+ /**
+ * Filter parameters not allowed for location groups targeting.
+ *
+ * Generated from protobuf enum LOCATION_FILTER_NOT_ALLOWED = 79;
+ */
+ const LOCATION_FILTER_NOT_ALLOWED = 79;
+ /**
+ * Given location filter parameter is invalid for location groups targeting.
+ *
+ * Generated from protobuf enum LOCATION_FILTER_INVALID = 80;
+ */
+ const LOCATION_FILTER_INVALID = 80;
+ /**
+ * Criteria type cannot be associated with a campaign and its ad group(s)
+ * simultaneously.
+ *
+ * Generated from protobuf enum CANNOT_ATTACH_CRITERIA_AT_CAMPAIGN_AND_ADGROUP = 81;
+ */
+ const CANNOT_ATTACH_CRITERIA_AT_CAMPAIGN_AND_ADGROUP = 81;
+ /**
+ * Range represented by hotel length of stay's min nights and max nights
+ * overlaps with an existing criterion.
+ *
+ * Generated from protobuf enum HOTEL_LENGTH_OF_STAY_OVERLAPS_WITH_EXISTING_CRITERION = 82;
+ */
+ const HOTEL_LENGTH_OF_STAY_OVERLAPS_WITH_EXISTING_CRITERION = 82;
+ /**
+ * Range represented by hotel advance booking window's min days and max days
+ * overlaps with an existing criterion.
+ *
+ * Generated from protobuf enum HOTEL_ADVANCE_BOOKING_WINDOW_OVERLAPS_WITH_EXISTING_CRITERION = 83;
+ */
+ const HOTEL_ADVANCE_BOOKING_WINDOW_OVERLAPS_WITH_EXISTING_CRITERION = 83;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/DateErrorEnum.php b/src/Google/Ads/GoogleAds/V0/Errors/DateErrorEnum.php
new file mode 100644
index 000000000..6e427a91e
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/DateErrorEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.errors.DateErrorEnum
+ */
+class DateErrorEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Errors\DateError::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/DateErrorEnum_DateError.php b/src/Google/Ads/GoogleAds/V0/Errors/DateErrorEnum_DateError.php
new file mode 100644
index 000000000..621c61cba
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/DateErrorEnum_DateError.php
@@ -0,0 +1,75 @@
+Google\Ads\Googleads\V0\Errors\DateErrorEnum\DateError
+ */
+class DateErrorEnum_DateError
+{
+ /**
+ * Enum unspecified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * The received error code is not known in this version.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * Given field values do not correspond to a valid date.
+ *
+ * Generated from protobuf enum INVALID_FIELD_VALUES_IN_DATE = 2;
+ */
+ const INVALID_FIELD_VALUES_IN_DATE = 2;
+ /**
+ * Given field values do not correspond to a valid date time.
+ *
+ * Generated from protobuf enum INVALID_FIELD_VALUES_IN_DATE_TIME = 3;
+ */
+ const INVALID_FIELD_VALUES_IN_DATE_TIME = 3;
+ /**
+ * The string date's format should be yyyymmdd.
+ *
+ * Generated from protobuf enum INVALID_STRING_DATE = 4;
+ */
+ const INVALID_STRING_DATE = 4;
+ /**
+ * The string date time's format should be yyyymmdd hhmmss [tz].
+ *
+ * Generated from protobuf enum INVALID_STRING_DATE_TIME = 6;
+ */
+ const INVALID_STRING_DATE_TIME = 6;
+ /**
+ * Date is before allowed minimum.
+ *
+ * Generated from protobuf enum EARLIER_THAN_MINIMUM_DATE = 7;
+ */
+ const EARLIER_THAN_MINIMUM_DATE = 7;
+ /**
+ * Date is after allowed maximum.
+ *
+ * Generated from protobuf enum LATER_THAN_MAXIMUM_DATE = 8;
+ */
+ const LATER_THAN_MAXIMUM_DATE = 8;
+ /**
+ * Date range bounds are not in order.
+ *
+ * Generated from protobuf enum DATE_RANGE_MINIMUM_DATE_LATER_THAN_MAXIMUM_DATE = 9;
+ */
+ const DATE_RANGE_MINIMUM_DATE_LATER_THAN_MAXIMUM_DATE = 9;
+ /**
+ * Both dates in range are null.
+ *
+ * Generated from protobuf enum DATE_RANGE_MINIMUM_AND_MAXIMUM_DATES_BOTH_NULL = 10;
+ */
+ const DATE_RANGE_MINIMUM_AND_MAXIMUM_DATES_BOTH_NULL = 10;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/DateRangeErrorEnum.php b/src/Google/Ads/GoogleAds/V0/Errors/DateRangeErrorEnum.php
new file mode 100644
index 000000000..0062c7ca0
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/DateRangeErrorEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.errors.DateRangeErrorEnum
+ */
+class DateRangeErrorEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Errors\DateRangeError::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/DateRangeErrorEnum_DateRangeError.php b/src/Google/Ads/GoogleAds/V0/Errors/DateRangeErrorEnum_DateRangeError.php
new file mode 100644
index 000000000..cf036d7f0
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/DateRangeErrorEnum_DateRangeError.php
@@ -0,0 +1,57 @@
+Google\Ads\Googleads\V0\Errors\DateRangeErrorEnum\DateRangeError
+ */
+class DateRangeErrorEnum_DateRangeError
+{
+ /**
+ * Enum unspecified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * The received error code is not known in this version.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * Invalid date.
+ *
+ * Generated from protobuf enum INVALID_DATE = 2;
+ */
+ const INVALID_DATE = 2;
+ /**
+ * The start date was after the end date.
+ *
+ * Generated from protobuf enum START_DATE_AFTER_END_DATE = 3;
+ */
+ const START_DATE_AFTER_END_DATE = 3;
+ /**
+ * Cannot set date to past time
+ *
+ * Generated from protobuf enum CANNOT_SET_DATE_TO_PAST = 4;
+ */
+ const CANNOT_SET_DATE_TO_PAST = 4;
+ /**
+ * A date was used that is past the system "last" date.
+ *
+ * Generated from protobuf enum AFTER_MAXIMUM_ALLOWABLE_DATE = 5;
+ */
+ const AFTER_MAXIMUM_ALLOWABLE_DATE = 5;
+ /**
+ * Trying to change start date on a campaign that has started.
+ *
+ * Generated from protobuf enum CANNOT_MODIFY_START_DATE_IF_ALREADY_STARTED = 6;
+ */
+ const CANNOT_MODIFY_START_DATE_IF_ALREADY_STARTED = 6;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/DistinctErrorEnum.php b/src/Google/Ads/GoogleAds/V0/Errors/DistinctErrorEnum.php
new file mode 100644
index 000000000..80d2c6405
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/DistinctErrorEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.errors.DistinctErrorEnum
+ */
+class DistinctErrorEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Errors\DistinctError::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/DistinctErrorEnum_DistinctError.php b/src/Google/Ads/GoogleAds/V0/Errors/DistinctErrorEnum_DistinctError.php
new file mode 100644
index 000000000..0e85d419c
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/DistinctErrorEnum_DistinctError.php
@@ -0,0 +1,39 @@
+Google\Ads\Googleads\V0\Errors\DistinctErrorEnum\DistinctError
+ */
+class DistinctErrorEnum_DistinctError
+{
+ /**
+ * Enum unspecified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * The received error code is not known in this version.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * Duplicate element.
+ *
+ * Generated from protobuf enum DUPLICATE_ELEMENT = 2;
+ */
+ const DUPLICATE_ELEMENT = 2;
+ /**
+ * Duplicate type.
+ *
+ * Generated from protobuf enum DUPLICATE_TYPE = 3;
+ */
+ const DUPLICATE_TYPE = 3;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/ErrorCode.php b/src/Google/Ads/GoogleAds/V0/Errors/ErrorCode.php
new file mode 100644
index 000000000..d363fde0d
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/ErrorCode.php
@@ -0,0 +1,1360 @@
+google.ads.googleads.v0.errors.ErrorCode
+ */
+class ErrorCode extends \Google\Protobuf\Internal\Message
+{
+ protected $error_code;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Errors\Errors::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * An error caused by the request
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.RequestErrorEnum.RequestError request_error = 1;
+ * @return int
+ */
+ public function getRequestError()
+ {
+ return $this->readOneof(1);
+ }
+
+ /**
+ * An error caused by the request
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.RequestErrorEnum.RequestError request_error = 1;
+ * @param int $var
+ * @return $this
+ */
+ public function setRequestError($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Errors\RequestErrorEnum_RequestError::class);
+ $this->writeOneof(1, $var);
+
+ return $this;
+ }
+
+ /**
+ * An error with a Bidding Strategy mutate.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.BiddingStrategyErrorEnum.BiddingStrategyError bidding_strategy_error = 2;
+ * @return int
+ */
+ public function getBiddingStrategyError()
+ {
+ return $this->readOneof(2);
+ }
+
+ /**
+ * An error with a Bidding Strategy mutate.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.BiddingStrategyErrorEnum.BiddingStrategyError bidding_strategy_error = 2;
+ * @param int $var
+ * @return $this
+ */
+ public function setBiddingStrategyError($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Errors\BiddingStrategyErrorEnum_BiddingStrategyError::class);
+ $this->writeOneof(2, $var);
+
+ return $this;
+ }
+
+ /**
+ * An error with a URL field mutate.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.UrlFieldErrorEnum.UrlFieldError url_field_error = 3;
+ * @return int
+ */
+ public function getUrlFieldError()
+ {
+ return $this->readOneof(3);
+ }
+
+ /**
+ * An error with a URL field mutate.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.UrlFieldErrorEnum.UrlFieldError url_field_error = 3;
+ * @param int $var
+ * @return $this
+ */
+ public function setUrlFieldError($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Errors\UrlFieldErrorEnum_UrlFieldError::class);
+ $this->writeOneof(3, $var);
+
+ return $this;
+ }
+
+ /**
+ * An error with a list operation.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.ListOperationErrorEnum.ListOperationError list_operation_error = 4;
+ * @return int
+ */
+ public function getListOperationError()
+ {
+ return $this->readOneof(4);
+ }
+
+ /**
+ * An error with a list operation.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.ListOperationErrorEnum.ListOperationError list_operation_error = 4;
+ * @param int $var
+ * @return $this
+ */
+ public function setListOperationError($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Errors\ListOperationErrorEnum_ListOperationError::class);
+ $this->writeOneof(4, $var);
+
+ return $this;
+ }
+
+ /**
+ * An error with an AWQL query
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.QueryErrorEnum.QueryError query_error = 5;
+ * @return int
+ */
+ public function getQueryError()
+ {
+ return $this->readOneof(5);
+ }
+
+ /**
+ * An error with an AWQL query
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.QueryErrorEnum.QueryError query_error = 5;
+ * @param int $var
+ * @return $this
+ */
+ public function setQueryError($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Errors\QueryErrorEnum_QueryError::class);
+ $this->writeOneof(5, $var);
+
+ return $this;
+ }
+
+ /**
+ * An error with a mutate
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.MutateErrorEnum.MutateError mutate_error = 7;
+ * @return int
+ */
+ public function getMutateError()
+ {
+ return $this->readOneof(7);
+ }
+
+ /**
+ * An error with a mutate
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.MutateErrorEnum.MutateError mutate_error = 7;
+ * @param int $var
+ * @return $this
+ */
+ public function setMutateError($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Errors\MutateErrorEnum_MutateError::class);
+ $this->writeOneof(7, $var);
+
+ return $this;
+ }
+
+ /**
+ * An error with a field mask
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.FieldMaskErrorEnum.FieldMaskError field_mask_error = 8;
+ * @return int
+ */
+ public function getFieldMaskError()
+ {
+ return $this->readOneof(8);
+ }
+
+ /**
+ * An error with a field mask
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.FieldMaskErrorEnum.FieldMaskError field_mask_error = 8;
+ * @param int $var
+ * @return $this
+ */
+ public function setFieldMaskError($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Errors\FieldMaskErrorEnum_FieldMaskError::class);
+ $this->writeOneof(8, $var);
+
+ return $this;
+ }
+
+ /**
+ * An error encountered when trying to authorize a user.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.AuthorizationErrorEnum.AuthorizationError authorization_error = 9;
+ * @return int
+ */
+ public function getAuthorizationError()
+ {
+ return $this->readOneof(9);
+ }
+
+ /**
+ * An error encountered when trying to authorize a user.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.AuthorizationErrorEnum.AuthorizationError authorization_error = 9;
+ * @param int $var
+ * @return $this
+ */
+ public function setAuthorizationError($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Errors\AuthorizationErrorEnum_AuthorizationError::class);
+ $this->writeOneof(9, $var);
+
+ return $this;
+ }
+
+ /**
+ * An unexpected server-side error.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.InternalErrorEnum.InternalError internal_error = 10;
+ * @return int
+ */
+ public function getInternalError()
+ {
+ return $this->readOneof(10);
+ }
+
+ /**
+ * An unexpected server-side error.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.InternalErrorEnum.InternalError internal_error = 10;
+ * @param int $var
+ * @return $this
+ */
+ public function setInternalError($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Errors\InternalErrorEnum_InternalError::class);
+ $this->writeOneof(10, $var);
+
+ return $this;
+ }
+
+ /**
+ * An error with the amonut of quota remaining.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.QuotaErrorEnum.QuotaError quota_error = 11;
+ * @return int
+ */
+ public function getQuotaError()
+ {
+ return $this->readOneof(11);
+ }
+
+ /**
+ * An error with the amonut of quota remaining.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.QuotaErrorEnum.QuotaError quota_error = 11;
+ * @param int $var
+ * @return $this
+ */
+ public function setQuotaError($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Errors\QuotaErrorEnum_QuotaError::class);
+ $this->writeOneof(11, $var);
+
+ return $this;
+ }
+
+ /**
+ * An error with an Ad Group Ad mutate.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.AdErrorEnum.AdError ad_error = 12;
+ * @return int
+ */
+ public function getAdError()
+ {
+ return $this->readOneof(12);
+ }
+
+ /**
+ * An error with an Ad Group Ad mutate.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.AdErrorEnum.AdError ad_error = 12;
+ * @param int $var
+ * @return $this
+ */
+ public function setAdError($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Errors\AdErrorEnum_AdError::class);
+ $this->writeOneof(12, $var);
+
+ return $this;
+ }
+
+ /**
+ * An error with an Ad Group mutate.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.AdGroupErrorEnum.AdGroupError ad_group_error = 13;
+ * @return int
+ */
+ public function getAdGroupError()
+ {
+ return $this->readOneof(13);
+ }
+
+ /**
+ * An error with an Ad Group mutate.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.AdGroupErrorEnum.AdGroupError ad_group_error = 13;
+ * @param int $var
+ * @return $this
+ */
+ public function setAdGroupError($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Errors\AdGroupErrorEnum_AdGroupError::class);
+ $this->writeOneof(13, $var);
+
+ return $this;
+ }
+
+ /**
+ * An error with a Campaign Budget mutate.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.CampaignBudgetErrorEnum.CampaignBudgetError campaign_budget_error = 14;
+ * @return int
+ */
+ public function getCampaignBudgetError()
+ {
+ return $this->readOneof(14);
+ }
+
+ /**
+ * An error with a Campaign Budget mutate.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.CampaignBudgetErrorEnum.CampaignBudgetError campaign_budget_error = 14;
+ * @param int $var
+ * @return $this
+ */
+ public function setCampaignBudgetError($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Errors\CampaignBudgetErrorEnum_CampaignBudgetError::class);
+ $this->writeOneof(14, $var);
+
+ return $this;
+ }
+
+ /**
+ * An error with a Campaign mutate.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.CampaignErrorEnum.CampaignError campaign_error = 15;
+ * @return int
+ */
+ public function getCampaignError()
+ {
+ return $this->readOneof(15);
+ }
+
+ /**
+ * An error with a Campaign mutate.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.CampaignErrorEnum.CampaignError campaign_error = 15;
+ * @param int $var
+ * @return $this
+ */
+ public function setCampaignError($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Errors\CampaignErrorEnum_CampaignError::class);
+ $this->writeOneof(15, $var);
+
+ return $this;
+ }
+
+ /**
+ * Indicates failure to properly authenticate user.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.AuthenticationErrorEnum.AuthenticationError authentication_error = 17;
+ * @return int
+ */
+ public function getAuthenticationError()
+ {
+ return $this->readOneof(17);
+ }
+
+ /**
+ * Indicates failure to properly authenticate user.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.AuthenticationErrorEnum.AuthenticationError authentication_error = 17;
+ * @param int $var
+ * @return $this
+ */
+ public function setAuthenticationError($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Errors\AuthenticationErrorEnum_AuthenticationError::class);
+ $this->writeOneof(17, $var);
+
+ return $this;
+ }
+
+ /**
+ * Indicates failure to properly authenticate user.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.AdGroupCriterionErrorEnum.AdGroupCriterionError ad_group_criterion_error = 18;
+ * @return int
+ */
+ public function getAdGroupCriterionError()
+ {
+ return $this->readOneof(18);
+ }
+
+ /**
+ * Indicates failure to properly authenticate user.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.AdGroupCriterionErrorEnum.AdGroupCriterionError ad_group_criterion_error = 18;
+ * @param int $var
+ * @return $this
+ */
+ public function setAdGroupCriterionError($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Errors\AdGroupCriterionErrorEnum_AdGroupCriterionError::class);
+ $this->writeOneof(18, $var);
+
+ return $this;
+ }
+
+ /**
+ * The reasons for the ad customizer error
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.AdCustomizerErrorEnum.AdCustomizerError ad_customizer_error = 19;
+ * @return int
+ */
+ public function getAdCustomizerError()
+ {
+ return $this->readOneof(19);
+ }
+
+ /**
+ * The reasons for the ad customizer error
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.AdCustomizerErrorEnum.AdCustomizerError ad_customizer_error = 19;
+ * @param int $var
+ * @return $this
+ */
+ public function setAdCustomizerError($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Errors\AdCustomizerErrorEnum_AdCustomizerError::class);
+ $this->writeOneof(19, $var);
+
+ return $this;
+ }
+
+ /**
+ * The reasons for the ad group ad error
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.AdGroupAdErrorEnum.AdGroupAdError ad_group_ad_error = 21;
+ * @return int
+ */
+ public function getAdGroupAdError()
+ {
+ return $this->readOneof(21);
+ }
+
+ /**
+ * The reasons for the ad group ad error
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.AdGroupAdErrorEnum.AdGroupAdError ad_group_ad_error = 21;
+ * @param int $var
+ * @return $this
+ */
+ public function setAdGroupAdError($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Errors\AdGroupAdErrorEnum_AdGroupAdError::class);
+ $this->writeOneof(21, $var);
+
+ return $this;
+ }
+
+ /**
+ * The reasons for the ad sharing error
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.AdSharingErrorEnum.AdSharingError ad_sharing_error = 24;
+ * @return int
+ */
+ public function getAdSharingError()
+ {
+ return $this->readOneof(24);
+ }
+
+ /**
+ * The reasons for the ad sharing error
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.AdSharingErrorEnum.AdSharingError ad_sharing_error = 24;
+ * @param int $var
+ * @return $this
+ */
+ public function setAdSharingError($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Errors\AdSharingErrorEnum_AdSharingError::class);
+ $this->writeOneof(24, $var);
+
+ return $this;
+ }
+
+ /**
+ * The reasons for the adx error
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.AdxErrorEnum.AdxError adx_error = 25;
+ * @return int
+ */
+ public function getAdxError()
+ {
+ return $this->readOneof(25);
+ }
+
+ /**
+ * The reasons for the adx error
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.AdxErrorEnum.AdxError adx_error = 25;
+ * @param int $var
+ * @return $this
+ */
+ public function setAdxError($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Errors\AdxErrorEnum_AdxError::class);
+ $this->writeOneof(25, $var);
+
+ return $this;
+ }
+
+ /**
+ * The reasons for the bidding errors
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.BiddingErrorEnum.BiddingError bidding_error = 26;
+ * @return int
+ */
+ public function getBiddingError()
+ {
+ return $this->readOneof(26);
+ }
+
+ /**
+ * The reasons for the bidding errors
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.BiddingErrorEnum.BiddingError bidding_error = 26;
+ * @param int $var
+ * @return $this
+ */
+ public function setBiddingError($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Errors\BiddingErrorEnum_BiddingError::class);
+ $this->writeOneof(26, $var);
+
+ return $this;
+ }
+
+ /**
+ * The reasons for the campaign criterion error
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.CampaignCriterionErrorEnum.CampaignCriterionError campaign_criterion_error = 29;
+ * @return int
+ */
+ public function getCampaignCriterionError()
+ {
+ return $this->readOneof(29);
+ }
+
+ /**
+ * The reasons for the campaign criterion error
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.CampaignCriterionErrorEnum.CampaignCriterionError campaign_criterion_error = 29;
+ * @param int $var
+ * @return $this
+ */
+ public function setCampaignCriterionError($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Errors\CampaignCriterionErrorEnum_CampaignCriterionError::class);
+ $this->writeOneof(29, $var);
+
+ return $this;
+ }
+
+ /**
+ * The reasons for the collection size error
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.CollectionSizeErrorEnum.CollectionSizeError collection_size_error = 31;
+ * @return int
+ */
+ public function getCollectionSizeError()
+ {
+ return $this->readOneof(31);
+ }
+
+ /**
+ * The reasons for the collection size error
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.CollectionSizeErrorEnum.CollectionSizeError collection_size_error = 31;
+ * @param int $var
+ * @return $this
+ */
+ public function setCollectionSizeError($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Errors\CollectionSizeErrorEnum_CollectionSizeError::class);
+ $this->writeOneof(31, $var);
+
+ return $this;
+ }
+
+ /**
+ * The reasons for the criterion error
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.CriterionErrorEnum.CriterionError criterion_error = 32;
+ * @return int
+ */
+ public function getCriterionError()
+ {
+ return $this->readOneof(32);
+ }
+
+ /**
+ * The reasons for the criterion error
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.CriterionErrorEnum.CriterionError criterion_error = 32;
+ * @param int $var
+ * @return $this
+ */
+ public function setCriterionError($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Errors\CriterionErrorEnum_CriterionError::class);
+ $this->writeOneof(32, $var);
+
+ return $this;
+ }
+
+ /**
+ * The reasons for the date error
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.DateErrorEnum.DateError date_error = 33;
+ * @return int
+ */
+ public function getDateError()
+ {
+ return $this->readOneof(33);
+ }
+
+ /**
+ * The reasons for the date error
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.DateErrorEnum.DateError date_error = 33;
+ * @param int $var
+ * @return $this
+ */
+ public function setDateError($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Errors\DateErrorEnum_DateError::class);
+ $this->writeOneof(33, $var);
+
+ return $this;
+ }
+
+ /**
+ * The reasons for the date range error
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.DateRangeErrorEnum.DateRangeError date_range_error = 34;
+ * @return int
+ */
+ public function getDateRangeError()
+ {
+ return $this->readOneof(34);
+ }
+
+ /**
+ * The reasons for the date range error
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.DateRangeErrorEnum.DateRangeError date_range_error = 34;
+ * @param int $var
+ * @return $this
+ */
+ public function setDateRangeError($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Errors\DateRangeErrorEnum_DateRangeError::class);
+ $this->writeOneof(34, $var);
+
+ return $this;
+ }
+
+ /**
+ * The reasons for the distinct error
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.DistinctErrorEnum.DistinctError distinct_error = 35;
+ * @return int
+ */
+ public function getDistinctError()
+ {
+ return $this->readOneof(35);
+ }
+
+ /**
+ * The reasons for the distinct error
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.DistinctErrorEnum.DistinctError distinct_error = 35;
+ * @param int $var
+ * @return $this
+ */
+ public function setDistinctError($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Errors\DistinctErrorEnum_DistinctError::class);
+ $this->writeOneof(35, $var);
+
+ return $this;
+ }
+
+ /**
+ * The reasons for the feed attribute reference error
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.FeedAttributeReferenceErrorEnum.FeedAttributeReferenceError feed_attribute_reference_error = 36;
+ * @return int
+ */
+ public function getFeedAttributeReferenceError()
+ {
+ return $this->readOneof(36);
+ }
+
+ /**
+ * The reasons for the feed attribute reference error
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.FeedAttributeReferenceErrorEnum.FeedAttributeReferenceError feed_attribute_reference_error = 36;
+ * @param int $var
+ * @return $this
+ */
+ public function setFeedAttributeReferenceError($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Errors\FeedAttributeReferenceErrorEnum_FeedAttributeReferenceError::class);
+ $this->writeOneof(36, $var);
+
+ return $this;
+ }
+
+ /**
+ * The reasons for the function error
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.FunctionErrorEnum.FunctionError function_error = 37;
+ * @return int
+ */
+ public function getFunctionError()
+ {
+ return $this->readOneof(37);
+ }
+
+ /**
+ * The reasons for the function error
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.FunctionErrorEnum.FunctionError function_error = 37;
+ * @param int $var
+ * @return $this
+ */
+ public function setFunctionError($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Errors\FunctionErrorEnum_FunctionError::class);
+ $this->writeOneof(37, $var);
+
+ return $this;
+ }
+
+ /**
+ * The reasons for the function parsing error
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.FunctionParsingErrorEnum.FunctionParsingError function_parsing_error = 38;
+ * @return int
+ */
+ public function getFunctionParsingError()
+ {
+ return $this->readOneof(38);
+ }
+
+ /**
+ * The reasons for the function parsing error
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.FunctionParsingErrorEnum.FunctionParsingError function_parsing_error = 38;
+ * @param int $var
+ * @return $this
+ */
+ public function setFunctionParsingError($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Errors\FunctionParsingErrorEnum_FunctionParsingError::class);
+ $this->writeOneof(38, $var);
+
+ return $this;
+ }
+
+ /**
+ * The reasons for the id error
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.IdErrorEnum.IdError id_error = 39;
+ * @return int
+ */
+ public function getIdError()
+ {
+ return $this->readOneof(39);
+ }
+
+ /**
+ * The reasons for the id error
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.IdErrorEnum.IdError id_error = 39;
+ * @param int $var
+ * @return $this
+ */
+ public function setIdError($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Errors\IdErrorEnum_IdError::class);
+ $this->writeOneof(39, $var);
+
+ return $this;
+ }
+
+ /**
+ * The reasons for the image error
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.ImageErrorEnum.ImageError image_error = 40;
+ * @return int
+ */
+ public function getImageError()
+ {
+ return $this->readOneof(40);
+ }
+
+ /**
+ * The reasons for the image error
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.ImageErrorEnum.ImageError image_error = 40;
+ * @param int $var
+ * @return $this
+ */
+ public function setImageError($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Errors\ImageErrorEnum_ImageError::class);
+ $this->writeOneof(40, $var);
+
+ return $this;
+ }
+
+ /**
+ * The reasons for the media bundle error
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.MediaBundleErrorEnum.MediaBundleError media_bundle_error = 42;
+ * @return int
+ */
+ public function getMediaBundleError()
+ {
+ return $this->readOneof(42);
+ }
+
+ /**
+ * The reasons for the media bundle error
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.MediaBundleErrorEnum.MediaBundleError media_bundle_error = 42;
+ * @param int $var
+ * @return $this
+ */
+ public function setMediaBundleError($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Errors\MediaBundleErrorEnum_MediaBundleError::class);
+ $this->writeOneof(42, $var);
+
+ return $this;
+ }
+
+ /**
+ * The reasons for the media error
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.MediaErrorEnum.MediaError media_error = 43;
+ * @return int
+ */
+ public function getMediaError()
+ {
+ return $this->readOneof(43);
+ }
+
+ /**
+ * The reasons for the media error
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.MediaErrorEnum.MediaError media_error = 43;
+ * @param int $var
+ * @return $this
+ */
+ public function setMediaError($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Errors\MediaErrorEnum_MediaError::class);
+ $this->writeOneof(43, $var);
+
+ return $this;
+ }
+
+ /**
+ * The reasons for the multiplier error
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.MultiplierErrorEnum.MultiplierError multiplier_error = 44;
+ * @return int
+ */
+ public function getMultiplierError()
+ {
+ return $this->readOneof(44);
+ }
+
+ /**
+ * The reasons for the multiplier error
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.MultiplierErrorEnum.MultiplierError multiplier_error = 44;
+ * @param int $var
+ * @return $this
+ */
+ public function setMultiplierError($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Errors\MultiplierErrorEnum_MultiplierError::class);
+ $this->writeOneof(44, $var);
+
+ return $this;
+ }
+
+ /**
+ * The reasons for the new resource creation error
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.NewResourceCreationErrorEnum.NewResourceCreationError new_resource_creation_error = 45;
+ * @return int
+ */
+ public function getNewResourceCreationError()
+ {
+ return $this->readOneof(45);
+ }
+
+ /**
+ * The reasons for the new resource creation error
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.NewResourceCreationErrorEnum.NewResourceCreationError new_resource_creation_error = 45;
+ * @param int $var
+ * @return $this
+ */
+ public function setNewResourceCreationError($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Errors\NewResourceCreationErrorEnum_NewResourceCreationError::class);
+ $this->writeOneof(45, $var);
+
+ return $this;
+ }
+
+ /**
+ * The reasons for the not empty error
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.NotEmptyErrorEnum.NotEmptyError not_empty_error = 46;
+ * @return int
+ */
+ public function getNotEmptyError()
+ {
+ return $this->readOneof(46);
+ }
+
+ /**
+ * The reasons for the not empty error
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.NotEmptyErrorEnum.NotEmptyError not_empty_error = 46;
+ * @param int $var
+ * @return $this
+ */
+ public function setNotEmptyError($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Errors\NotEmptyErrorEnum_NotEmptyError::class);
+ $this->writeOneof(46, $var);
+
+ return $this;
+ }
+
+ /**
+ * The reasons for the null error
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.NullErrorEnum.NullError null_error = 47;
+ * @return int
+ */
+ public function getNullError()
+ {
+ return $this->readOneof(47);
+ }
+
+ /**
+ * The reasons for the null error
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.NullErrorEnum.NullError null_error = 47;
+ * @param int $var
+ * @return $this
+ */
+ public function setNullError($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Errors\NullErrorEnum_NullError::class);
+ $this->writeOneof(47, $var);
+
+ return $this;
+ }
+
+ /**
+ * The reasons for the operator error
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.OperatorErrorEnum.OperatorError operator_error = 48;
+ * @return int
+ */
+ public function getOperatorError()
+ {
+ return $this->readOneof(48);
+ }
+
+ /**
+ * The reasons for the operator error
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.OperatorErrorEnum.OperatorError operator_error = 48;
+ * @param int $var
+ * @return $this
+ */
+ public function setOperatorError($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Errors\OperatorErrorEnum_OperatorError::class);
+ $this->writeOneof(48, $var);
+
+ return $this;
+ }
+
+ /**
+ * The reasons for the range error
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.RangeErrorEnum.RangeError range_error = 49;
+ * @return int
+ */
+ public function getRangeError()
+ {
+ return $this->readOneof(49);
+ }
+
+ /**
+ * The reasons for the range error
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.RangeErrorEnum.RangeError range_error = 49;
+ * @param int $var
+ * @return $this
+ */
+ public function setRangeError($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Errors\RangeErrorEnum_RangeError::class);
+ $this->writeOneof(49, $var);
+
+ return $this;
+ }
+
+ /**
+ * The reasons for error in applying a recommendation
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.RecommendationErrorEnum.RecommendationError recommendation_error = 58;
+ * @return int
+ */
+ public function getRecommendationError()
+ {
+ return $this->readOneof(58);
+ }
+
+ /**
+ * The reasons for error in applying a recommendation
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.RecommendationErrorEnum.RecommendationError recommendation_error = 58;
+ * @param int $var
+ * @return $this
+ */
+ public function setRecommendationError($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Errors\RecommendationErrorEnum_RecommendationError::class);
+ $this->writeOneof(58, $var);
+
+ return $this;
+ }
+
+ /**
+ * The reasons for the region code error
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.RegionCodeErrorEnum.RegionCodeError region_code_error = 51;
+ * @return int
+ */
+ public function getRegionCodeError()
+ {
+ return $this->readOneof(51);
+ }
+
+ /**
+ * The reasons for the region code error
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.RegionCodeErrorEnum.RegionCodeError region_code_error = 51;
+ * @param int $var
+ * @return $this
+ */
+ public function setRegionCodeError($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Errors\RegionCodeErrorEnum_RegionCodeError::class);
+ $this->writeOneof(51, $var);
+
+ return $this;
+ }
+
+ /**
+ * The reasons for the setting error
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.SettingErrorEnum.SettingError setting_error = 52;
+ * @return int
+ */
+ public function getSettingError()
+ {
+ return $this->readOneof(52);
+ }
+
+ /**
+ * The reasons for the setting error
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.SettingErrorEnum.SettingError setting_error = 52;
+ * @param int $var
+ * @return $this
+ */
+ public function setSettingError($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Errors\SettingErrorEnum_SettingError::class);
+ $this->writeOneof(52, $var);
+
+ return $this;
+ }
+
+ /**
+ * The reasons for the string format error
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.StringFormatErrorEnum.StringFormatError string_format_error = 53;
+ * @return int
+ */
+ public function getStringFormatError()
+ {
+ return $this->readOneof(53);
+ }
+
+ /**
+ * The reasons for the string format error
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.StringFormatErrorEnum.StringFormatError string_format_error = 53;
+ * @param int $var
+ * @return $this
+ */
+ public function setStringFormatError($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Errors\StringFormatErrorEnum_StringFormatError::class);
+ $this->writeOneof(53, $var);
+
+ return $this;
+ }
+
+ /**
+ * The reasons for the string length error
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.StringLengthErrorEnum.StringLengthError string_length_error = 54;
+ * @return int
+ */
+ public function getStringLengthError()
+ {
+ return $this->readOneof(54);
+ }
+
+ /**
+ * The reasons for the string length error
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.StringLengthErrorEnum.StringLengthError string_length_error = 54;
+ * @param int $var
+ * @return $this
+ */
+ public function setStringLengthError($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Errors\StringLengthErrorEnum_StringLengthError::class);
+ $this->writeOneof(54, $var);
+
+ return $this;
+ }
+
+ /**
+ * The reasons for the operation access denied error
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.OperationAccessDeniedErrorEnum.OperationAccessDeniedError operation_access_denied_error = 55;
+ * @return int
+ */
+ public function getOperationAccessDeniedError()
+ {
+ return $this->readOneof(55);
+ }
+
+ /**
+ * The reasons for the operation access denied error
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.OperationAccessDeniedErrorEnum.OperationAccessDeniedError operation_access_denied_error = 55;
+ * @param int $var
+ * @return $this
+ */
+ public function setOperationAccessDeniedError($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Errors\OperationAccessDeniedErrorEnum_OperationAccessDeniedError::class);
+ $this->writeOneof(55, $var);
+
+ return $this;
+ }
+
+ /**
+ * The reasons for the resource access denied error
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.ResourceAccessDeniedErrorEnum.ResourceAccessDeniedError resource_access_denied_error = 56;
+ * @return int
+ */
+ public function getResourceAccessDeniedError()
+ {
+ return $this->readOneof(56);
+ }
+
+ /**
+ * The reasons for the resource access denied error
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.ResourceAccessDeniedErrorEnum.ResourceAccessDeniedError resource_access_denied_error = 56;
+ * @param int $var
+ * @return $this
+ */
+ public function setResourceAccessDeniedError($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Errors\ResourceAccessDeniedErrorEnum_ResourceAccessDeniedError::class);
+ $this->writeOneof(56, $var);
+
+ return $this;
+ }
+
+ /**
+ * The reasons for the resource count limit exceeded error
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.ResourceCountLimitExceededErrorEnum.ResourceCountLimitExceededError resource_count_limit_exceeded_error = 57;
+ * @return int
+ */
+ public function getResourceCountLimitExceededError()
+ {
+ return $this->readOneof(57);
+ }
+
+ /**
+ * The reasons for the resource count limit exceeded error
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.ResourceCountLimitExceededErrorEnum.ResourceCountLimitExceededError resource_count_limit_exceeded_error = 57;
+ * @param int $var
+ * @return $this
+ */
+ public function setResourceCountLimitExceededError($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Errors\ResourceCountLimitExceededErrorEnum_ResourceCountLimitExceededError::class);
+ $this->writeOneof(57, $var);
+
+ return $this;
+ }
+
+ /**
+ * The reasons for the ad group bid modifier error
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.AdGroupBidModifierErrorEnum.AdGroupBidModifierError ad_group_bid_modifier_error = 59;
+ * @return int
+ */
+ public function getAdGroupBidModifierError()
+ {
+ return $this->readOneof(59);
+ }
+
+ /**
+ * The reasons for the ad group bid modifier error
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.AdGroupBidModifierErrorEnum.AdGroupBidModifierError ad_group_bid_modifier_error = 59;
+ * @param int $var
+ * @return $this
+ */
+ public function setAdGroupBidModifierError($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Errors\AdGroupBidModifierErrorEnum_AdGroupBidModifierError::class);
+ $this->writeOneof(59, $var);
+
+ return $this;
+ }
+
+ /**
+ * The reasons for the context error
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.ContextErrorEnum.ContextError context_error = 60;
+ * @return int
+ */
+ public function getContextError()
+ {
+ return $this->readOneof(60);
+ }
+
+ /**
+ * The reasons for the context error
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.ContextErrorEnum.ContextError context_error = 60;
+ * @param int $var
+ * @return $this
+ */
+ public function setContextError($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Errors\ContextErrorEnum_ContextError::class);
+ $this->writeOneof(60, $var);
+
+ return $this;
+ }
+
+ /**
+ * The reasons for the field error
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.FieldErrorEnum.FieldError field_error = 61;
+ * @return int
+ */
+ public function getFieldError()
+ {
+ return $this->readOneof(61);
+ }
+
+ /**
+ * The reasons for the field error
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.FieldErrorEnum.FieldError field_error = 61;
+ * @param int $var
+ * @return $this
+ */
+ public function setFieldError($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Errors\FieldErrorEnum_FieldError::class);
+ $this->writeOneof(61, $var);
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getErrorCode()
+ {
+ return $this->whichOneof("error_code");
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/ErrorDetails.php b/src/Google/Ads/GoogleAds/V0/Errors/ErrorDetails.php
new file mode 100644
index 000000000..5e36fd5dd
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/ErrorDetails.php
@@ -0,0 +1,92 @@
+google.ads.googleads.v0.errors.ErrorDetails
+ */
+class ErrorDetails extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The error code that should have been returned, but wasn't. This is used
+ * when the error code is InternalError.ERROR_CODE_NOT_PUBLISHED.
+ *
+ * Generated from protobuf field string unpublished_error_code = 1;
+ */
+ private $unpublished_error_code = '';
+ /**
+ * Describes an ad policy violation.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.PolicyViolationDetails policy_violation_details = 2;
+ */
+ private $policy_violation_details = null;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Errors\Errors::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * The error code that should have been returned, but wasn't. This is used
+ * when the error code is InternalError.ERROR_CODE_NOT_PUBLISHED.
+ *
+ * Generated from protobuf field string unpublished_error_code = 1;
+ * @return string
+ */
+ public function getUnpublishedErrorCode()
+ {
+ return $this->unpublished_error_code;
+ }
+
+ /**
+ * The error code that should have been returned, but wasn't. This is used
+ * when the error code is InternalError.ERROR_CODE_NOT_PUBLISHED.
+ *
+ * Generated from protobuf field string unpublished_error_code = 1;
+ * @param string $var
+ * @return $this
+ */
+ public function setUnpublishedErrorCode($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->unpublished_error_code = $var;
+
+ return $this;
+ }
+
+ /**
+ * Describes an ad policy violation.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.PolicyViolationDetails policy_violation_details = 2;
+ * @return \Google\Ads\GoogleAds\V0\Errors\PolicyViolationDetails
+ */
+ public function getPolicyViolationDetails()
+ {
+ return $this->policy_violation_details;
+ }
+
+ /**
+ * Describes an ad policy violation.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.PolicyViolationDetails policy_violation_details = 2;
+ * @param \Google\Ads\GoogleAds\V0\Errors\PolicyViolationDetails $var
+ * @return $this
+ */
+ public function setPolicyViolationDetails($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Errors\PolicyViolationDetails::class);
+ $this->policy_violation_details = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/ErrorLocation.php b/src/Google/Ads/GoogleAds/V0/Errors/ErrorLocation.php
new file mode 100644
index 000000000..e98d43181
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/ErrorLocation.php
@@ -0,0 +1,92 @@
+google.ads.googleads.v0.errors.ErrorLocation
+ */
+class ErrorLocation extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The mutate operation that failed
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value operation_index = 1;
+ */
+ private $operation_index = null;
+ /**
+ * A field path that indicates which field was invalid in the resource being
+ * mutated.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.errors.ErrorLocation.FieldPathElement field_path_elements = 2;
+ */
+ private $field_path_elements;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Errors\Errors::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * The mutate operation that failed
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value operation_index = 1;
+ * @return \Google\Protobuf\Int64Value
+ */
+ public function getOperationIndex()
+ {
+ return $this->operation_index;
+ }
+
+ /**
+ * The mutate operation that failed
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value operation_index = 1;
+ * @param \Google\Protobuf\Int64Value $var
+ * @return $this
+ */
+ public function setOperationIndex($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Int64Value::class);
+ $this->operation_index = $var;
+
+ return $this;
+ }
+
+ /**
+ * A field path that indicates which field was invalid in the resource being
+ * mutated.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.errors.ErrorLocation.FieldPathElement field_path_elements = 2;
+ * @return \Google\Protobuf\Internal\RepeatedField
+ */
+ public function getFieldPathElements()
+ {
+ return $this->field_path_elements;
+ }
+
+ /**
+ * A field path that indicates which field was invalid in the resource being
+ * mutated.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.errors.ErrorLocation.FieldPathElement field_path_elements = 2;
+ * @param \Google\Ads\GoogleAds\V0\Errors\ErrorLocation_FieldPathElement[]|\Google\Protobuf\Internal\RepeatedField $var
+ * @return $this
+ */
+ public function setFieldPathElements($var)
+ {
+ $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Ads\GoogleAds\V0\Errors\ErrorLocation_FieldPathElement::class);
+ $this->field_path_elements = $arr;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/ErrorLocation_FieldPathElement.php b/src/Google/Ads/GoogleAds/V0/Errors/ErrorLocation_FieldPathElement.php
new file mode 100644
index 000000000..77dc9c3a3
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/ErrorLocation_FieldPathElement.php
@@ -0,0 +1,89 @@
+google.ads.googleads.v0.errors.ErrorLocation.FieldPathElement
+ */
+class ErrorLocation_FieldPathElement extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The name of a field
+ *
+ * Generated from protobuf field string field_name = 1;
+ */
+ private $field_name = '';
+ /**
+ * If field_name is a list, this is the element that failed
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value index = 2;
+ */
+ private $index = null;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Errors\Errors::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * The name of a field
+ *
+ * Generated from protobuf field string field_name = 1;
+ * @return string
+ */
+ public function getFieldName()
+ {
+ return $this->field_name;
+ }
+
+ /**
+ * The name of a field
+ *
+ * Generated from protobuf field string field_name = 1;
+ * @param string $var
+ * @return $this
+ */
+ public function setFieldName($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->field_name = $var;
+
+ return $this;
+ }
+
+ /**
+ * If field_name is a list, this is the element that failed
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value index = 2;
+ * @return \Google\Protobuf\Int64Value
+ */
+ public function getIndex()
+ {
+ return $this->index;
+ }
+
+ /**
+ * If field_name is a list, this is the element that failed
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value index = 2;
+ * @param \Google\Protobuf\Int64Value $var
+ * @return $this
+ */
+ public function setIndex($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Int64Value::class);
+ $this->index = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/FeedAttributeReferenceErrorEnum.php b/src/Google/Ads/GoogleAds/V0/Errors/FeedAttributeReferenceErrorEnum.php
new file mode 100644
index 000000000..23a5206de
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/FeedAttributeReferenceErrorEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.errors.FeedAttributeReferenceErrorEnum
+ */
+class FeedAttributeReferenceErrorEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Errors\FeedAttributeReferenceError::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/FeedAttributeReferenceErrorEnum_FeedAttributeReferenceError.php b/src/Google/Ads/GoogleAds/V0/Errors/FeedAttributeReferenceErrorEnum_FeedAttributeReferenceError.php
new file mode 100644
index 000000000..d5f2dddcd
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/FeedAttributeReferenceErrorEnum_FeedAttributeReferenceError.php
@@ -0,0 +1,45 @@
+Google\Ads\Googleads\V0\Errors\FeedAttributeReferenceErrorEnum\FeedAttributeReferenceError
+ */
+class FeedAttributeReferenceErrorEnum_FeedAttributeReferenceError
+{
+ /**
+ * Enum unspecified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * The received error code is not known in this version.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * A feed referenced by ID has been deleted.
+ *
+ * Generated from protobuf enum CANNOT_REFERENCE_DELETED_FEED = 2;
+ */
+ const CANNOT_REFERENCE_DELETED_FEED = 2;
+ /**
+ * There is no active feed with the given name.
+ *
+ * Generated from protobuf enum INVALID_FEED_NAME = 3;
+ */
+ const INVALID_FEED_NAME = 3;
+ /**
+ * There is no feed attribute in an active feed with the given name.
+ *
+ * Generated from protobuf enum INVALID_FEED_ATTRIBUTE_NAME = 4;
+ */
+ const INVALID_FEED_ATTRIBUTE_NAME = 4;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/FieldErrorEnum.php b/src/Google/Ads/GoogleAds/V0/Errors/FieldErrorEnum.php
new file mode 100644
index 000000000..96423efd8
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/FieldErrorEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.errors.FieldErrorEnum
+ */
+class FieldErrorEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Errors\FieldError::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/FieldErrorEnum_FieldError.php b/src/Google/Ads/GoogleAds/V0/Errors/FieldErrorEnum_FieldError.php
new file mode 100644
index 000000000..0edb2bf2e
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/FieldErrorEnum_FieldError.php
@@ -0,0 +1,57 @@
+Google\Ads\Googleads\V0\Errors\FieldErrorEnum\FieldError
+ */
+class FieldErrorEnum_FieldError
+{
+ /**
+ * Enum unspecified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * The received error code is not known in this version.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * The required field was not present in the resource.
+ *
+ * Generated from protobuf enum REQUIRED = 2;
+ */
+ const REQUIRED = 2;
+ /**
+ * The field attempted to be mutated is immutable.
+ *
+ * Generated from protobuf enum IMMUTABLE_FIELD = 3;
+ */
+ const IMMUTABLE_FIELD = 3;
+ /**
+ * The field's value is invalid.
+ *
+ * Generated from protobuf enum INVALID_VALUE = 4;
+ */
+ const INVALID_VALUE = 4;
+ /**
+ * The field cannot be set.
+ *
+ * Generated from protobuf enum VALUE_MUST_BE_UNSET = 5;
+ */
+ const VALUE_MUST_BE_UNSET = 5;
+ /**
+ * The required repeated field was empty.
+ *
+ * Generated from protobuf enum REQUIRED_NONEMPTY_LIST = 6;
+ */
+ const REQUIRED_NONEMPTY_LIST = 6;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/FieldMaskErrorEnum.php b/src/Google/Ads/GoogleAds/V0/Errors/FieldMaskErrorEnum.php
new file mode 100644
index 000000000..46cc43b10
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/FieldMaskErrorEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.errors.FieldMaskErrorEnum
+ */
+class FieldMaskErrorEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Errors\FieldMaskError::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/FieldMaskErrorEnum_FieldMaskError.php b/src/Google/Ads/GoogleAds/V0/Errors/FieldMaskErrorEnum_FieldMaskError.php
new file mode 100644
index 000000000..3970f99bf
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/FieldMaskErrorEnum_FieldMaskError.php
@@ -0,0 +1,53 @@
+Google\Ads\Googleads\V0\Errors\FieldMaskErrorEnum\FieldMaskError
+ */
+class FieldMaskErrorEnum_FieldMaskError
+{
+ /**
+ * Enum unspecified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * The received error code is not known in this version.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * The field mask must be provided for update operations.
+ *
+ * Generated from protobuf enum FIELD_MASK_MISSING = 5;
+ */
+ const FIELD_MASK_MISSING = 5;
+ /**
+ * The field mask must be empty for create and remove operations.
+ *
+ * Generated from protobuf enum FIELD_MASK_NOT_ALLOWED = 4;
+ */
+ const FIELD_MASK_NOT_ALLOWED = 4;
+ /**
+ * The field mask contained an invalid field.
+ *
+ * Generated from protobuf enum FIELD_NOT_FOUND = 2;
+ */
+ const FIELD_NOT_FOUND = 2;
+ /**
+ * The field mask updated a field with subfields. Fields with subfields may
+ * be cleared, but not updated. To fix this, the field mask should select
+ * all the subfields of the invalid field.
+ *
+ * Generated from protobuf enum FIELD_HAS_SUBFIELDS = 3;
+ */
+ const FIELD_HAS_SUBFIELDS = 3;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/FunctionErrorEnum.php b/src/Google/Ads/GoogleAds/V0/Errors/FunctionErrorEnum.php
new file mode 100644
index 000000000..1bc02499e
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/FunctionErrorEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.errors.FunctionErrorEnum
+ */
+class FunctionErrorEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Errors\FunctionError::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/FunctionErrorEnum_FunctionError.php b/src/Google/Ads/GoogleAds/V0/Errors/FunctionErrorEnum_FunctionError.php
new file mode 100644
index 000000000..88ff9229c
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/FunctionErrorEnum_FunctionError.php
@@ -0,0 +1,124 @@
+Google\Ads\Googleads\V0\Errors\FunctionErrorEnum\FunctionError
+ */
+class FunctionErrorEnum_FunctionError
+{
+ /**
+ * Enum unspecified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * The received error code is not known in this version.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * The format of the function is not recognized as a supported function
+ * format.
+ *
+ * Generated from protobuf enum INVALID_FUNCTION_FORMAT = 2;
+ */
+ const INVALID_FUNCTION_FORMAT = 2;
+ /**
+ * Operand data types do not match.
+ *
+ * Generated from protobuf enum DATA_TYPE_MISMATCH = 3;
+ */
+ const DATA_TYPE_MISMATCH = 3;
+ /**
+ * The operands cannot be used together in a conjunction.
+ *
+ * Generated from protobuf enum INVALID_CONJUNCTION_OPERANDS = 4;
+ */
+ const INVALID_CONJUNCTION_OPERANDS = 4;
+ /**
+ * Invalid numer of Operands.
+ *
+ * Generated from protobuf enum INVALID_NUMBER_OF_OPERANDS = 5;
+ */
+ const INVALID_NUMBER_OF_OPERANDS = 5;
+ /**
+ * Operand Type not supported.
+ *
+ * Generated from protobuf enum INVALID_OPERAND_TYPE = 6;
+ */
+ const INVALID_OPERAND_TYPE = 6;
+ /**
+ * Operator not supported.
+ *
+ * Generated from protobuf enum INVALID_OPERATOR = 7;
+ */
+ const INVALID_OPERATOR = 7;
+ /**
+ * Request context type not supported.
+ *
+ * Generated from protobuf enum INVALID_REQUEST_CONTEXT_TYPE = 8;
+ */
+ const INVALID_REQUEST_CONTEXT_TYPE = 8;
+ /**
+ * The matching function is not allowed for call placeholders
+ *
+ * Generated from protobuf enum INVALID_FUNCTION_FOR_CALL_PLACEHOLDER = 9;
+ */
+ const INVALID_FUNCTION_FOR_CALL_PLACEHOLDER = 9;
+ /**
+ * The matching function is not allowed for the specified placeholder
+ *
+ * Generated from protobuf enum INVALID_FUNCTION_FOR_PLACEHOLDER = 10;
+ */
+ const INVALID_FUNCTION_FOR_PLACEHOLDER = 10;
+ /**
+ * Invalid operand.
+ *
+ * Generated from protobuf enum INVALID_OPERAND = 11;
+ */
+ const INVALID_OPERAND = 11;
+ /**
+ * Missing value for the constant operand.
+ *
+ * Generated from protobuf enum MISSING_CONSTANT_OPERAND_VALUE = 12;
+ */
+ const MISSING_CONSTANT_OPERAND_VALUE = 12;
+ /**
+ * The value of the constant operand is invalid.
+ *
+ * Generated from protobuf enum INVALID_CONSTANT_OPERAND_VALUE = 13;
+ */
+ const INVALID_CONSTANT_OPERAND_VALUE = 13;
+ /**
+ * Invalid function nesting.
+ *
+ * Generated from protobuf enum INVALID_NESTING = 14;
+ */
+ const INVALID_NESTING = 14;
+ /**
+ * The Feed ID was different from another Feed ID in the same function.
+ *
+ * Generated from protobuf enum MULTIPLE_FEED_IDS_NOT_SUPPORTED = 15;
+ */
+ const MULTIPLE_FEED_IDS_NOT_SUPPORTED = 15;
+ /**
+ * The matching function is invalid for use with a feed with a fixed schema.
+ *
+ * Generated from protobuf enum INVALID_FUNCTION_FOR_FEED_WITH_FIXED_SCHEMA = 16;
+ */
+ const INVALID_FUNCTION_FOR_FEED_WITH_FIXED_SCHEMA = 16;
+ /**
+ * Invalid attribute name.
+ *
+ * Generated from protobuf enum INVALID_ATTRIBUTE_NAME = 17;
+ */
+ const INVALID_ATTRIBUTE_NAME = 17;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/FunctionParsingErrorEnum.php b/src/Google/Ads/GoogleAds/V0/Errors/FunctionParsingErrorEnum.php
new file mode 100644
index 000000000..21673fdab
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/FunctionParsingErrorEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.errors.FunctionParsingErrorEnum
+ */
+class FunctionParsingErrorEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Errors\FunctionParsingError::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/FunctionParsingErrorEnum_FunctionParsingError.php b/src/Google/Ads/GoogleAds/V0/Errors/FunctionParsingErrorEnum_FunctionParsingError.php
new file mode 100644
index 000000000..11f6362f9
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/FunctionParsingErrorEnum_FunctionParsingError.php
@@ -0,0 +1,93 @@
+Google\Ads\Googleads\V0\Errors\FunctionParsingErrorEnum\FunctionParsingError
+ */
+class FunctionParsingErrorEnum_FunctionParsingError
+{
+ /**
+ * Enum unspecified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * The received error code is not known in this version.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * Unexpected end of function string.
+ *
+ * Generated from protobuf enum NO_MORE_INPUT = 2;
+ */
+ const NO_MORE_INPUT = 2;
+ /**
+ * Could not find an expected character.
+ *
+ * Generated from protobuf enum EXPECTED_CHARACTER = 3;
+ */
+ const EXPECTED_CHARACTER = 3;
+ /**
+ * Unexpected separator character.
+ *
+ * Generated from protobuf enum UNEXPECTED_SEPARATOR = 4;
+ */
+ const UNEXPECTED_SEPARATOR = 4;
+ /**
+ * Unmatched left bracket or parenthesis.
+ *
+ * Generated from protobuf enum UNMATCHED_LEFT_BRACKET = 5;
+ */
+ const UNMATCHED_LEFT_BRACKET = 5;
+ /**
+ * Unmatched right bracket or parenthesis.
+ *
+ * Generated from protobuf enum UNMATCHED_RIGHT_BRACKET = 6;
+ */
+ const UNMATCHED_RIGHT_BRACKET = 6;
+ /**
+ * Functions are nested too deeply.
+ *
+ * Generated from protobuf enum TOO_MANY_NESTED_FUNCTIONS = 7;
+ */
+ const TOO_MANY_NESTED_FUNCTIONS = 7;
+ /**
+ * Missing right-hand-side operand.
+ *
+ * Generated from protobuf enum MISSING_RIGHT_HAND_OPERAND = 8;
+ */
+ const MISSING_RIGHT_HAND_OPERAND = 8;
+ /**
+ * Invalid operator/function name.
+ *
+ * Generated from protobuf enum INVALID_OPERATOR_NAME = 9;
+ */
+ const INVALID_OPERATOR_NAME = 9;
+ /**
+ * Feed attribute operand's argument is not an integer.
+ *
+ * Generated from protobuf enum FEED_ATTRIBUTE_OPERAND_ARGUMENT_NOT_INTEGER = 10;
+ */
+ const FEED_ATTRIBUTE_OPERAND_ARGUMENT_NOT_INTEGER = 10;
+ /**
+ * Missing function operands.
+ *
+ * Generated from protobuf enum NO_OPERANDS = 11;
+ */
+ const NO_OPERANDS = 11;
+ /**
+ * Function had too many operands.
+ *
+ * Generated from protobuf enum TOO_MANY_OPERANDS = 12;
+ */
+ const TOO_MANY_OPERANDS = 12;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/GoogleAdsError.php b/src/Google/Ads/GoogleAds/V0/Errors/GoogleAdsError.php
new file mode 100644
index 000000000..b8c97ec97
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/GoogleAdsError.php
@@ -0,0 +1,188 @@
+google.ads.googleads.v0.errors.GoogleAdsError
+ */
+class GoogleAdsError extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * An enum value that indicates which error occurred.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.ErrorCode error_code = 1;
+ */
+ private $error_code = null;
+ /**
+ * A human-readable description of the error.
+ *
+ * Generated from protobuf field string message = 2;
+ */
+ private $message = '';
+ /**
+ * The value that triggered the error.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.Value trigger = 3;
+ */
+ private $trigger = null;
+ /**
+ * Describes the part of the request proto that caused the error.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.ErrorLocation location = 4;
+ */
+ private $location = null;
+ /**
+ * Additional error details, which are returned by certain error codes. Most
+ * error codes do not include details.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.ErrorDetails details = 5;
+ */
+ private $details = null;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Errors\Errors::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * An enum value that indicates which error occurred.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.ErrorCode error_code = 1;
+ * @return \Google\Ads\GoogleAds\V0\Errors\ErrorCode
+ */
+ public function getErrorCode()
+ {
+ return $this->error_code;
+ }
+
+ /**
+ * An enum value that indicates which error occurred.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.ErrorCode error_code = 1;
+ * @param \Google\Ads\GoogleAds\V0\Errors\ErrorCode $var
+ * @return $this
+ */
+ public function setErrorCode($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Errors\ErrorCode::class);
+ $this->error_code = $var;
+
+ return $this;
+ }
+
+ /**
+ * A human-readable description of the error.
+ *
+ * Generated from protobuf field string message = 2;
+ * @return string
+ */
+ public function getMessage()
+ {
+ return $this->message;
+ }
+
+ /**
+ * A human-readable description of the error.
+ *
+ * Generated from protobuf field string message = 2;
+ * @param string $var
+ * @return $this
+ */
+ public function setMessage($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->message = $var;
+
+ return $this;
+ }
+
+ /**
+ * The value that triggered the error.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.Value trigger = 3;
+ * @return \Google\Ads\GoogleAds\V0\Common\Value
+ */
+ public function getTrigger()
+ {
+ return $this->trigger;
+ }
+
+ /**
+ * The value that triggered the error.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.Value trigger = 3;
+ * @param \Google\Ads\GoogleAds\V0\Common\Value $var
+ * @return $this
+ */
+ public function setTrigger($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Common\Value::class);
+ $this->trigger = $var;
+
+ return $this;
+ }
+
+ /**
+ * Describes the part of the request proto that caused the error.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.ErrorLocation location = 4;
+ * @return \Google\Ads\GoogleAds\V0\Errors\ErrorLocation
+ */
+ public function getLocation()
+ {
+ return $this->location;
+ }
+
+ /**
+ * Describes the part of the request proto that caused the error.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.ErrorLocation location = 4;
+ * @param \Google\Ads\GoogleAds\V0\Errors\ErrorLocation $var
+ * @return $this
+ */
+ public function setLocation($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Errors\ErrorLocation::class);
+ $this->location = $var;
+
+ return $this;
+ }
+
+ /**
+ * Additional error details, which are returned by certain error codes. Most
+ * error codes do not include details.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.ErrorDetails details = 5;
+ * @return \Google\Ads\GoogleAds\V0\Errors\ErrorDetails
+ */
+ public function getDetails()
+ {
+ return $this->details;
+ }
+
+ /**
+ * Additional error details, which are returned by certain error codes. Most
+ * error codes do not include details.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.errors.ErrorDetails details = 5;
+ * @param \Google\Ads\GoogleAds\V0\Errors\ErrorDetails $var
+ * @return $this
+ */
+ public function setDetails($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Errors\ErrorDetails::class);
+ $this->details = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/GoogleAdsFailure.php b/src/Google/Ads/GoogleAds/V0/Errors/GoogleAdsFailure.php
new file mode 100644
index 000000000..38da677c0
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/GoogleAdsFailure.php
@@ -0,0 +1,58 @@
+google.ads.googleads.v0.errors.GoogleAdsFailure
+ */
+class GoogleAdsFailure extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The list of errors that occurred.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.errors.GoogleAdsError errors = 1;
+ */
+ private $errors;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Errors\Errors::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * The list of errors that occurred.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.errors.GoogleAdsError errors = 1;
+ * @return \Google\Protobuf\Internal\RepeatedField
+ */
+ public function getErrors()
+ {
+ return $this->errors;
+ }
+
+ /**
+ * The list of errors that occurred.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.errors.GoogleAdsError errors = 1;
+ * @param \Google\Ads\GoogleAds\V0\Errors\GoogleAdsError[]|\Google\Protobuf\Internal\RepeatedField $var
+ * @return $this
+ */
+ public function setErrors($var)
+ {
+ $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Ads\GoogleAds\V0\Errors\GoogleAdsError::class);
+ $this->errors = $arr;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/IdErrorEnum.php b/src/Google/Ads/GoogleAds/V0/Errors/IdErrorEnum.php
new file mode 100644
index 000000000..e9beb386a
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/IdErrorEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.errors.IdErrorEnum
+ */
+class IdErrorEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Errors\IdError::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/IdErrorEnum_IdError.php b/src/Google/Ads/GoogleAds/V0/Errors/IdErrorEnum_IdError.php
new file mode 100644
index 000000000..2d05bfa6a
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/IdErrorEnum_IdError.php
@@ -0,0 +1,33 @@
+Google\Ads\Googleads\V0\Errors\IdErrorEnum\IdError
+ */
+class IdErrorEnum_IdError
+{
+ /**
+ * Enum unspecified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * The received error code is not known in this version.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * Id not found
+ *
+ * Generated from protobuf enum NOT_FOUND = 2;
+ */
+ const NOT_FOUND = 2;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/ImageErrorEnum.php b/src/Google/Ads/GoogleAds/V0/Errors/ImageErrorEnum.php
new file mode 100644
index 000000000..a487b912f
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/ImageErrorEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.errors.ImageErrorEnum
+ */
+class ImageErrorEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Errors\ImageError::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/ImageErrorEnum_ImageError.php b/src/Google/Ads/GoogleAds/V0/Errors/ImageErrorEnum_ImageError.php
new file mode 100644
index 000000000..0b4615fe4
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/ImageErrorEnum_ImageError.php
@@ -0,0 +1,250 @@
+Google\Ads\Googleads\V0\Errors\ImageErrorEnum\ImageError
+ */
+class ImageErrorEnum_ImageError
+{
+ /**
+ * Enum unspecified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * The received error code is not known in this version.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * The image is not valid.
+ *
+ * Generated from protobuf enum INVALID_IMAGE = 2;
+ */
+ const INVALID_IMAGE = 2;
+ /**
+ * The image could not be stored.
+ *
+ * Generated from protobuf enum STORAGE_ERROR = 3;
+ */
+ const STORAGE_ERROR = 3;
+ /**
+ * There was a problem with the request.
+ *
+ * Generated from protobuf enum BAD_REQUEST = 4;
+ */
+ const BAD_REQUEST = 4;
+ /**
+ * The image is not of legal dimensions.
+ *
+ * Generated from protobuf enum UNEXPECTED_SIZE = 5;
+ */
+ const UNEXPECTED_SIZE = 5;
+ /**
+ * Animated image are not permitted.
+ *
+ * Generated from protobuf enum ANIMATED_NOT_ALLOWED = 6;
+ */
+ const ANIMATED_NOT_ALLOWED = 6;
+ /**
+ * Animation is too long.
+ *
+ * Generated from protobuf enum ANIMATION_TOO_LONG = 7;
+ */
+ const ANIMATION_TOO_LONG = 7;
+ /**
+ * There was an error on the server.
+ *
+ * Generated from protobuf enum SERVER_ERROR = 8;
+ */
+ const SERVER_ERROR = 8;
+ /**
+ * Image cannot be in CMYK color format.
+ *
+ * Generated from protobuf enum CMYK_JPEG_NOT_ALLOWED = 9;
+ */
+ const CMYK_JPEG_NOT_ALLOWED = 9;
+ /**
+ * Flash images are not permitted.
+ *
+ * Generated from protobuf enum FLASH_NOT_ALLOWED = 10;
+ */
+ const FLASH_NOT_ALLOWED = 10;
+ /**
+ * Flash images must support clickTag.
+ *
+ * Generated from protobuf enum FLASH_WITHOUT_CLICKTAG = 11;
+ */
+ const FLASH_WITHOUT_CLICKTAG = 11;
+ /**
+ * A flash error has occurred after fixing the click tag.
+ *
+ * Generated from protobuf enum FLASH_ERROR_AFTER_FIXING_CLICK_TAG = 12;
+ */
+ const FLASH_ERROR_AFTER_FIXING_CLICK_TAG = 12;
+ /**
+ * Unacceptable visual effects.
+ *
+ * Generated from protobuf enum ANIMATED_VISUAL_EFFECT = 13;
+ */
+ const ANIMATED_VISUAL_EFFECT = 13;
+ /**
+ * There was a problem with the flash image.
+ *
+ * Generated from protobuf enum FLASH_ERROR = 14;
+ */
+ const FLASH_ERROR = 14;
+ /**
+ * Incorrect image layout.
+ *
+ * Generated from protobuf enum LAYOUT_PROBLEM = 15;
+ */
+ const LAYOUT_PROBLEM = 15;
+ /**
+ * There was a problem reading the image file.
+ *
+ * Generated from protobuf enum PROBLEM_READING_IMAGE_FILE = 16;
+ */
+ const PROBLEM_READING_IMAGE_FILE = 16;
+ /**
+ * There was an error storing the image.
+ *
+ * Generated from protobuf enum ERROR_STORING_IMAGE = 17;
+ */
+ const ERROR_STORING_IMAGE = 17;
+ /**
+ * The aspect ratio of the image is not allowed.
+ *
+ * Generated from protobuf enum ASPECT_RATIO_NOT_ALLOWED = 18;
+ */
+ const ASPECT_RATIO_NOT_ALLOWED = 18;
+ /**
+ * Flash cannot have network objects.
+ *
+ * Generated from protobuf enum FLASH_HAS_NETWORK_OBJECTS = 19;
+ */
+ const FLASH_HAS_NETWORK_OBJECTS = 19;
+ /**
+ * Flash cannot have network methods.
+ *
+ * Generated from protobuf enum FLASH_HAS_NETWORK_METHODS = 20;
+ */
+ const FLASH_HAS_NETWORK_METHODS = 20;
+ /**
+ * Flash cannot have a Url.
+ *
+ * Generated from protobuf enum FLASH_HAS_URL = 21;
+ */
+ const FLASH_HAS_URL = 21;
+ /**
+ * Flash cannot use mouse tracking.
+ *
+ * Generated from protobuf enum FLASH_HAS_MOUSE_TRACKING = 22;
+ */
+ const FLASH_HAS_MOUSE_TRACKING = 22;
+ /**
+ * Flash cannot have a random number.
+ *
+ * Generated from protobuf enum FLASH_HAS_RANDOM_NUM = 23;
+ */
+ const FLASH_HAS_RANDOM_NUM = 23;
+ /**
+ * Ad click target cannot be '_self'.
+ *
+ * Generated from protobuf enum FLASH_SELF_TARGETS = 24;
+ */
+ const FLASH_SELF_TARGETS = 24;
+ /**
+ * GetUrl method should only use '_blank'.
+ *
+ * Generated from protobuf enum FLASH_BAD_GETURL_TARGET = 25;
+ */
+ const FLASH_BAD_GETURL_TARGET = 25;
+ /**
+ * Flash version is not supported.
+ *
+ * Generated from protobuf enum FLASH_VERSION_NOT_SUPPORTED = 26;
+ */
+ const FLASH_VERSION_NOT_SUPPORTED = 26;
+ /**
+ * Flash movies need to have hard coded click URL or clickTAG
+ *
+ * Generated from protobuf enum FLASH_WITHOUT_HARD_CODED_CLICK_URL = 27;
+ */
+ const FLASH_WITHOUT_HARD_CODED_CLICK_URL = 27;
+ /**
+ * Uploaded flash file is corrupted.
+ *
+ * Generated from protobuf enum INVALID_FLASH_FILE = 28;
+ */
+ const INVALID_FLASH_FILE = 28;
+ /**
+ * Uploaded flash file can be parsed, but the click tag can not be fixed
+ * properly.
+ *
+ * Generated from protobuf enum FAILED_TO_FIX_CLICK_TAG_IN_FLASH = 29;
+ */
+ const FAILED_TO_FIX_CLICK_TAG_IN_FLASH = 29;
+ /**
+ * Flash movie accesses network resources
+ *
+ * Generated from protobuf enum FLASH_ACCESSES_NETWORK_RESOURCES = 30;
+ */
+ const FLASH_ACCESSES_NETWORK_RESOURCES = 30;
+ /**
+ * Flash movie attempts to call external javascript code
+ *
+ * Generated from protobuf enum FLASH_EXTERNAL_JS_CALL = 31;
+ */
+ const FLASH_EXTERNAL_JS_CALL = 31;
+ /**
+ * Flash movie attempts to call flash system commands
+ *
+ * Generated from protobuf enum FLASH_EXTERNAL_FS_CALL = 32;
+ */
+ const FLASH_EXTERNAL_FS_CALL = 32;
+ /**
+ * Image file is too large.
+ *
+ * Generated from protobuf enum FILE_TOO_LARGE = 33;
+ */
+ const FILE_TOO_LARGE = 33;
+ /**
+ * Image data is too large.
+ *
+ * Generated from protobuf enum IMAGE_DATA_TOO_LARGE = 34;
+ */
+ const IMAGE_DATA_TOO_LARGE = 34;
+ /**
+ * Error while processing the image.
+ *
+ * Generated from protobuf enum IMAGE_PROCESSING_ERROR = 35;
+ */
+ const IMAGE_PROCESSING_ERROR = 35;
+ /**
+ * Image is too small.
+ *
+ * Generated from protobuf enum IMAGE_TOO_SMALL = 36;
+ */
+ const IMAGE_TOO_SMALL = 36;
+ /**
+ * Input was invalid.
+ *
+ * Generated from protobuf enum INVALID_INPUT = 37;
+ */
+ const INVALID_INPUT = 37;
+ /**
+ * There was a problem reading the image file.
+ *
+ * Generated from protobuf enum PROBLEM_READING_FILE = 38;
+ */
+ const PROBLEM_READING_FILE = 38;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/InternalErrorEnum.php b/src/Google/Ads/GoogleAds/V0/Errors/InternalErrorEnum.php
new file mode 100644
index 000000000..6dd94995b
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/InternalErrorEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.errors.InternalErrorEnum
+ */
+class InternalErrorEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Errors\InternalError::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/InternalErrorEnum_InternalError.php b/src/Google/Ads/GoogleAds/V0/Errors/InternalErrorEnum_InternalError.php
new file mode 100644
index 000000000..fcdf1de17
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/InternalErrorEnum_InternalError.php
@@ -0,0 +1,47 @@
+Google\Ads\Googleads\V0\Errors\InternalErrorEnum\InternalError
+ */
+class InternalErrorEnum_InternalError
+{
+ /**
+ * Enum unspecified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * The received error code is not known in this version.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * Google Ads API encountered unexpected internal error.
+ *
+ * Generated from protobuf enum INTERNAL_ERROR = 2;
+ */
+ const INTERNAL_ERROR = 2;
+ /**
+ * The intended error code doesn't exist in any API version. This will be
+ * fixed by adding a new error code as soon as possible.
+ *
+ * Generated from protobuf enum ERROR_CODE_NOT_PUBLISHED = 3;
+ */
+ const ERROR_CODE_NOT_PUBLISHED = 3;
+ /**
+ * Google Ads API encountered an unexpected transient error. The user
+ * should retry their request in these cases.
+ *
+ * Generated from protobuf enum TRANSIENT_ERROR = 4;
+ */
+ const TRANSIENT_ERROR = 4;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/ListOperationErrorEnum.php b/src/Google/Ads/GoogleAds/V0/Errors/ListOperationErrorEnum.php
new file mode 100644
index 000000000..5b776df4a
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/ListOperationErrorEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.errors.ListOperationErrorEnum
+ */
+class ListOperationErrorEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Errors\ListOperationError::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/ListOperationErrorEnum_ListOperationError.php b/src/Google/Ads/GoogleAds/V0/Errors/ListOperationErrorEnum_ListOperationError.php
new file mode 100644
index 000000000..d982d6a63
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/ListOperationErrorEnum_ListOperationError.php
@@ -0,0 +1,39 @@
+Google\Ads\Googleads\V0\Errors\ListOperationErrorEnum\ListOperationError
+ */
+class ListOperationErrorEnum_ListOperationError
+{
+ /**
+ * Enum unspecified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * The received error code is not known in this version.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * Field required in value is missing.
+ *
+ * Generated from protobuf enum REQUIRED_FIELD_MISSING = 7;
+ */
+ const REQUIRED_FIELD_MISSING = 7;
+ /**
+ * Duplicate or identical value is sent in multiple list operations.
+ *
+ * Generated from protobuf enum DUPLICATE_VALUES = 8;
+ */
+ const DUPLICATE_VALUES = 8;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/MediaBundleErrorEnum.php b/src/Google/Ads/GoogleAds/V0/Errors/MediaBundleErrorEnum.php
new file mode 100644
index 000000000..35a413ad8
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/MediaBundleErrorEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.errors.MediaBundleErrorEnum
+ */
+class MediaBundleErrorEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Errors\MediaBundleError::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/MediaBundleErrorEnum_MediaBundleError.php b/src/Google/Ads/GoogleAds/V0/Errors/MediaBundleErrorEnum_MediaBundleError.php
new file mode 100644
index 000000000..6e1ab0777
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/MediaBundleErrorEnum_MediaBundleError.php
@@ -0,0 +1,159 @@
+Google\Ads\Googleads\V0\Errors\MediaBundleErrorEnum\MediaBundleError
+ */
+class MediaBundleErrorEnum_MediaBundleError
+{
+ /**
+ * Enum unspecified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * The received error code is not known in this version.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * There was a problem with the request.
+ *
+ * Generated from protobuf enum BAD_REQUEST = 3;
+ */
+ const BAD_REQUEST = 3;
+ /**
+ * HTML5 ads using DoubleClick Studio created ZIP files are not supported.
+ *
+ * Generated from protobuf enum DOUBLECLICK_BUNDLE_NOT_ALLOWED = 4;
+ */
+ const DOUBLECLICK_BUNDLE_NOT_ALLOWED = 4;
+ /**
+ * Cannot reference URL external to the media bundle.
+ *
+ * Generated from protobuf enum EXTERNAL_URL_NOT_ALLOWED = 5;
+ */
+ const EXTERNAL_URL_NOT_ALLOWED = 5;
+ /**
+ * Media bundle file is too large.
+ *
+ * Generated from protobuf enum FILE_TOO_LARGE = 6;
+ */
+ const FILE_TOO_LARGE = 6;
+ /**
+ * ZIP file from Google Web Designer is not published.
+ *
+ * Generated from protobuf enum GOOGLE_WEB_DESIGNER_ZIP_FILE_NOT_PUBLISHED = 7;
+ */
+ const GOOGLE_WEB_DESIGNER_ZIP_FILE_NOT_PUBLISHED = 7;
+ /**
+ * Input was invalid.
+ *
+ * Generated from protobuf enum INVALID_INPUT = 8;
+ */
+ const INVALID_INPUT = 8;
+ /**
+ * There was a problem with the media bundle.
+ *
+ * Generated from protobuf enum INVALID_MEDIA_BUNDLE = 9;
+ */
+ const INVALID_MEDIA_BUNDLE = 9;
+ /**
+ * There was a problem with one or more of the media bundle entries.
+ *
+ * Generated from protobuf enum INVALID_MEDIA_BUNDLE_ENTRY = 10;
+ */
+ const INVALID_MEDIA_BUNDLE_ENTRY = 10;
+ /**
+ * The media bundle contains a file with an unknown mime type
+ *
+ * Generated from protobuf enum INVALID_MIME_TYPE = 11;
+ */
+ const INVALID_MIME_TYPE = 11;
+ /**
+ * The media bundle contain an invalid asset path.
+ *
+ * Generated from protobuf enum INVALID_PATH = 12;
+ */
+ const INVALID_PATH = 12;
+ /**
+ * HTML5 ad is trying to reference an asset not in .ZIP file
+ *
+ * Generated from protobuf enum INVALID_URL_REFERENCE = 13;
+ */
+ const INVALID_URL_REFERENCE = 13;
+ /**
+ * Media data is too large.
+ *
+ * Generated from protobuf enum MEDIA_DATA_TOO_LARGE = 14;
+ */
+ const MEDIA_DATA_TOO_LARGE = 14;
+ /**
+ * The media bundle contains no primary entry.
+ *
+ * Generated from protobuf enum MISSING_PRIMARY_MEDIA_BUNDLE_ENTRY = 15;
+ */
+ const MISSING_PRIMARY_MEDIA_BUNDLE_ENTRY = 15;
+ /**
+ * There was an error on the server.
+ *
+ * Generated from protobuf enum SERVER_ERROR = 16;
+ */
+ const SERVER_ERROR = 16;
+ /**
+ * The image could not be stored.
+ *
+ * Generated from protobuf enum STORAGE_ERROR = 17;
+ */
+ const STORAGE_ERROR = 17;
+ /**
+ * Media bundle created with the Swiffy tool is not allowed.
+ *
+ * Generated from protobuf enum SWIFFY_BUNDLE_NOT_ALLOWED = 18;
+ */
+ const SWIFFY_BUNDLE_NOT_ALLOWED = 18;
+ /**
+ * The media bundle contains too many files.
+ *
+ * Generated from protobuf enum TOO_MANY_FILES = 19;
+ */
+ const TOO_MANY_FILES = 19;
+ /**
+ * The media bundle is not of legal dimensions.
+ *
+ * Generated from protobuf enum UNEXPECTED_SIZE = 20;
+ */
+ const UNEXPECTED_SIZE = 20;
+ /**
+ * Google Web Designer not created for "AdWords" environment.
+ *
+ * Generated from protobuf enum UNSUPPORTED_GOOGLE_WEB_DESIGNER_ENVIRONMENT = 21;
+ */
+ const UNSUPPORTED_GOOGLE_WEB_DESIGNER_ENVIRONMENT = 21;
+ /**
+ * Unsupported HTML5 feature in HTML5 asset.
+ *
+ * Generated from protobuf enum UNSUPPORTED_HTML5_FEATURE = 22;
+ */
+ const UNSUPPORTED_HTML5_FEATURE = 22;
+ /**
+ * URL in HTML5 entry is not ssl compliant.
+ *
+ * Generated from protobuf enum URL_IN_MEDIA_BUNDLE_NOT_SSL_COMPLIANT = 23;
+ */
+ const URL_IN_MEDIA_BUNDLE_NOT_SSL_COMPLIANT = 23;
+ /**
+ * Custom exits not allowed in HTML5 entry.
+ *
+ * Generated from protobuf enum CUSTOM_EXIT_NOT_ALLOWED = 24;
+ */
+ const CUSTOM_EXIT_NOT_ALLOWED = 24;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/MediaErrorEnum.php b/src/Google/Ads/GoogleAds/V0/Errors/MediaErrorEnum.php
new file mode 100644
index 000000000..8598b8a08
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/MediaErrorEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.errors.MediaErrorEnum
+ */
+class MediaErrorEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Errors\MediaError::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/MediaErrorEnum_MediaError.php b/src/Google/Ads/GoogleAds/V0/Errors/MediaErrorEnum_MediaError.php
new file mode 100644
index 000000000..8b59f2d6a
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/MediaErrorEnum_MediaError.php
@@ -0,0 +1,172 @@
+Google\Ads\Googleads\V0\Errors\MediaErrorEnum\MediaError
+ */
+class MediaErrorEnum_MediaError
+{
+ /**
+ * Enum unspecified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * The received error code is not known in this version.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * Cannot add a standard icon type
+ *
+ * Generated from protobuf enum CANNOT_ADD_STANDARD_ICON = 2;
+ */
+ const CANNOT_ADD_STANDARD_ICON = 2;
+ /**
+ * May only select Standard Icons alone
+ *
+ * Generated from protobuf enum CANNOT_SELECT_STANDARD_ICON_WITH_OTHER_TYPES = 3;
+ */
+ const CANNOT_SELECT_STANDARD_ICON_WITH_OTHER_TYPES = 3;
+ /**
+ * Image contains both a media ID and media data.
+ *
+ * Generated from protobuf enum CANNOT_SPECIFY_MEDIA_ID_AND_DATA = 4;
+ */
+ const CANNOT_SPECIFY_MEDIA_ID_AND_DATA = 4;
+ /**
+ * A media with given type and reference id already exists
+ *
+ * Generated from protobuf enum DUPLICATE_MEDIA = 5;
+ */
+ const DUPLICATE_MEDIA = 5;
+ /**
+ * A required field was not specified or is an empty string.
+ *
+ * Generated from protobuf enum EMPTY_FIELD = 6;
+ */
+ const EMPTY_FIELD = 6;
+ /**
+ * A media may only be modified once per call
+ *
+ * Generated from protobuf enum RESOURCE_REFERENCED_IN_MULTIPLE_OPS = 7;
+ */
+ const RESOURCE_REFERENCED_IN_MULTIPLE_OPS = 7;
+ /**
+ * Field is not supported for the media sub type.
+ *
+ * Generated from protobuf enum FIELD_NOT_SUPPORTED_FOR_MEDIA_SUB_TYPE = 8;
+ */
+ const FIELD_NOT_SUPPORTED_FOR_MEDIA_SUB_TYPE = 8;
+ /**
+ * The media id is invalid
+ *
+ * Generated from protobuf enum INVALID_MEDIA_ID = 9;
+ */
+ const INVALID_MEDIA_ID = 9;
+ /**
+ * The media subtype is invalid
+ *
+ * Generated from protobuf enum INVALID_MEDIA_SUB_TYPE = 10;
+ */
+ const INVALID_MEDIA_SUB_TYPE = 10;
+ /**
+ * The media type is invalid
+ *
+ * Generated from protobuf enum INVALID_MEDIA_TYPE = 11;
+ */
+ const INVALID_MEDIA_TYPE = 11;
+ /**
+ * The mimetype is invalid
+ *
+ * Generated from protobuf enum INVALID_MIME_TYPE = 12;
+ */
+ const INVALID_MIME_TYPE = 12;
+ /**
+ * The media reference id is invalid
+ *
+ * Generated from protobuf enum INVALID_REFERENCE_ID = 13;
+ */
+ const INVALID_REFERENCE_ID = 13;
+ /**
+ * The YouTube video id is invalid
+ *
+ * Generated from protobuf enum INVALID_YOU_TUBE_ID = 14;
+ */
+ const INVALID_YOU_TUBE_ID = 14;
+ /**
+ * Media has failed transcoding
+ *
+ * Generated from protobuf enum MEDIA_FAILED_TRANSCODING = 15;
+ */
+ const MEDIA_FAILED_TRANSCODING = 15;
+ /**
+ * Media has not been transcoded
+ *
+ * Generated from protobuf enum MEDIA_NOT_TRANSCODED = 16;
+ */
+ const MEDIA_NOT_TRANSCODED = 16;
+ /**
+ * The MediaType does not match the actual media object's type
+ *
+ * Generated from protobuf enum MEDIA_TYPE_DOES_NOT_MATCH_OBJECT_TYPE = 17;
+ */
+ const MEDIA_TYPE_DOES_NOT_MATCH_OBJECT_TYPE = 17;
+ /**
+ * None of the fields have been specified.
+ *
+ * Generated from protobuf enum NO_FIELDS_SPECIFIED = 18;
+ */
+ const NO_FIELDS_SPECIFIED = 18;
+ /**
+ * One of reference Id or media Id must be specified
+ *
+ * Generated from protobuf enum NULL_REFERENCE_ID_AND_MEDIA_ID = 19;
+ */
+ const NULL_REFERENCE_ID_AND_MEDIA_ID = 19;
+ /**
+ * The string has too many characters.
+ *
+ * Generated from protobuf enum TOO_LONG = 20;
+ */
+ const TOO_LONG = 20;
+ /**
+ * The specified operation is not supported. Only ADD, SET, and REMOVE are
+ * supported
+ *
+ * Generated from protobuf enum UNSUPPORTED_OPERATION = 21;
+ */
+ const UNSUPPORTED_OPERATION = 21;
+ /**
+ * The specified type is not supported.
+ *
+ * Generated from protobuf enum UNSUPPORTED_TYPE = 22;
+ */
+ const UNSUPPORTED_TYPE = 22;
+ /**
+ * YouTube is unavailable for requesting video data.
+ *
+ * Generated from protobuf enum YOU_TUBE_SERVICE_UNAVAILABLE = 23;
+ */
+ const YOU_TUBE_SERVICE_UNAVAILABLE = 23;
+ /**
+ * The YouTube video has a non positive duration.
+ *
+ * Generated from protobuf enum YOU_TUBE_VIDEO_HAS_NON_POSITIVE_DURATION = 24;
+ */
+ const YOU_TUBE_VIDEO_HAS_NON_POSITIVE_DURATION = 24;
+ /**
+ * The YouTube video id is syntactically valid but the video was not found.
+ *
+ * Generated from protobuf enum YOU_TUBE_VIDEO_NOT_FOUND = 25;
+ */
+ const YOU_TUBE_VIDEO_NOT_FOUND = 25;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/MultiplierErrorEnum.php b/src/Google/Ads/GoogleAds/V0/Errors/MultiplierErrorEnum.php
new file mode 100644
index 000000000..3aa6ec2bd
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/MultiplierErrorEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.errors.MultiplierErrorEnum
+ */
+class MultiplierErrorEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Errors\MultiplierError::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/MultiplierErrorEnum_MultiplierError.php b/src/Google/Ads/GoogleAds/V0/Errors/MultiplierErrorEnum_MultiplierError.php
new file mode 100644
index 000000000..7e3c12848
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/MultiplierErrorEnum_MultiplierError.php
@@ -0,0 +1,100 @@
+Google\Ads\Googleads\V0\Errors\MultiplierErrorEnum\MultiplierError
+ */
+class MultiplierErrorEnum_MultiplierError
+{
+ /**
+ * Enum unspecified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * The received error code is not known in this version.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * Multiplier value is too high
+ *
+ * Generated from protobuf enum MULTIPLIER_TOO_HIGH = 2;
+ */
+ const MULTIPLIER_TOO_HIGH = 2;
+ /**
+ * Multiplier value is too low
+ *
+ * Generated from protobuf enum MULTIPLIER_TOO_LOW = 3;
+ */
+ const MULTIPLIER_TOO_LOW = 3;
+ /**
+ * Too many fractional digits
+ *
+ * Generated from protobuf enum TOO_MANY_FRACTIONAL_DIGITS = 4;
+ */
+ const TOO_MANY_FRACTIONAL_DIGITS = 4;
+ /**
+ * A multiplier cannot be set for this bidding strategy
+ *
+ * Generated from protobuf enum MULTIPLIER_NOT_ALLOWED_FOR_BIDDING_STRATEGY = 5;
+ */
+ const MULTIPLIER_NOT_ALLOWED_FOR_BIDDING_STRATEGY = 5;
+ /**
+ * A multiplier cannot be set when there is no base bid (e.g., content max
+ * cpc)
+ *
+ * Generated from protobuf enum MULTIPLIER_NOT_ALLOWED_WHEN_BASE_BID_IS_MISSING = 6;
+ */
+ const MULTIPLIER_NOT_ALLOWED_WHEN_BASE_BID_IS_MISSING = 6;
+ /**
+ * A bid multiplier must be specified
+ *
+ * Generated from protobuf enum NO_MULTIPLIER_SPECIFIED = 7;
+ */
+ const NO_MULTIPLIER_SPECIFIED = 7;
+ /**
+ * Multiplier causes bid to exceed daily budget
+ *
+ * Generated from protobuf enum MULTIPLIER_CAUSES_BID_TO_EXCEED_DAILY_BUDGET = 8;
+ */
+ const MULTIPLIER_CAUSES_BID_TO_EXCEED_DAILY_BUDGET = 8;
+ /**
+ * Multiplier causes bid to exceed monthly budget
+ *
+ * Generated from protobuf enum MULTIPLIER_CAUSES_BID_TO_EXCEED_MONTHLY_BUDGET = 9;
+ */
+ const MULTIPLIER_CAUSES_BID_TO_EXCEED_MONTHLY_BUDGET = 9;
+ /**
+ * Multiplier causes bid to exceed custom budget
+ *
+ * Generated from protobuf enum MULTIPLIER_CAUSES_BID_TO_EXCEED_CUSTOM_BUDGET = 10;
+ */
+ const MULTIPLIER_CAUSES_BID_TO_EXCEED_CUSTOM_BUDGET = 10;
+ /**
+ * Multiplier causes bid to exceed maximum allowed bid
+ *
+ * Generated from protobuf enum MULTIPLIER_CAUSES_BID_TO_EXCEED_MAX_ALLOWED_BID = 11;
+ */
+ const MULTIPLIER_CAUSES_BID_TO_EXCEED_MAX_ALLOWED_BID = 11;
+ /**
+ * Multiplier causes bid to become less than the minimum bid allowed
+ *
+ * Generated from protobuf enum BID_LESS_THAN_MIN_ALLOWED_BID_WITH_MULTIPLIER = 12;
+ */
+ const BID_LESS_THAN_MIN_ALLOWED_BID_WITH_MULTIPLIER = 12;
+ /**
+ * Multiplier type (cpc vs. cpm) needs to match campaign's bidding strategy
+ *
+ * Generated from protobuf enum MULTIPLIER_AND_BIDDING_STRATEGY_TYPE_MISMATCH = 13;
+ */
+ const MULTIPLIER_AND_BIDDING_STRATEGY_TYPE_MISMATCH = 13;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/MutateErrorEnum.php b/src/Google/Ads/GoogleAds/V0/Errors/MutateErrorEnum.php
new file mode 100644
index 000000000..7b349d5cb
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/MutateErrorEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.errors.MutateErrorEnum
+ */
+class MutateErrorEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Errors\MutateError::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/MutateErrorEnum_MutateError.php b/src/Google/Ads/GoogleAds/V0/Errors/MutateErrorEnum_MutateError.php
new file mode 100644
index 000000000..1263a90bc
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/MutateErrorEnum_MutateError.php
@@ -0,0 +1,39 @@
+Google\Ads\Googleads\V0\Errors\MutateErrorEnum\MutateError
+ */
+class MutateErrorEnum_MutateError
+{
+ /**
+ * Enum unspecified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * The received error code is not known in this version.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * Requested resource was not found.
+ *
+ * Generated from protobuf enum RESOURCE_NOT_FOUND = 3;
+ */
+ const RESOURCE_NOT_FOUND = 3;
+ /**
+ * Cannot mutate the same resource twice in one request.
+ *
+ * Generated from protobuf enum ID_EXISTS_IN_MULTIPLE_MUTATES = 7;
+ */
+ const ID_EXISTS_IN_MULTIPLE_MUTATES = 7;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/NewResourceCreationErrorEnum.php b/src/Google/Ads/GoogleAds/V0/Errors/NewResourceCreationErrorEnum.php
new file mode 100644
index 000000000..fcaafd13c
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/NewResourceCreationErrorEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.errors.NewResourceCreationErrorEnum
+ */
+class NewResourceCreationErrorEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Errors\NewResourceCreationError::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/NewResourceCreationErrorEnum_NewResourceCreationError.php b/src/Google/Ads/GoogleAds/V0/Errors/NewResourceCreationErrorEnum_NewResourceCreationError.php
new file mode 100644
index 000000000..929027311
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/NewResourceCreationErrorEnum_NewResourceCreationError.php
@@ -0,0 +1,46 @@
+Google\Ads\Googleads\V0\Errors\NewResourceCreationErrorEnum\NewResourceCreationError
+ */
+class NewResourceCreationErrorEnum_NewResourceCreationError
+{
+ /**
+ * Enum unspecified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * The received error code is not known in this version.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * Do not set the id field while creating new entities.
+ *
+ * Generated from protobuf enum CANNOT_SET_ID_FOR_ADD = 2;
+ */
+ const CANNOT_SET_ID_FOR_ADD = 2;
+ /**
+ * Creating more than one resource with the same temp ID is not allowed.
+ *
+ * Generated from protobuf enum DUPLICATE_TEMP_IDS = 3;
+ */
+ const DUPLICATE_TEMP_IDS = 3;
+ /**
+ * Parent object with specified temp id failed validation, so no deep
+ * validation will be done for this child resource.
+ *
+ * Generated from protobuf enum TEMP_ID_RESOURCE_HAD_ERRORS = 4;
+ */
+ const TEMP_ID_RESOURCE_HAD_ERRORS = 4;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/NotEmptyErrorEnum.php b/src/Google/Ads/GoogleAds/V0/Errors/NotEmptyErrorEnum.php
new file mode 100644
index 000000000..9a708aea7
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/NotEmptyErrorEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.errors.NotEmptyErrorEnum
+ */
+class NotEmptyErrorEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Errors\NotEmptyError::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/NotEmptyErrorEnum_NotEmptyError.php b/src/Google/Ads/GoogleAds/V0/Errors/NotEmptyErrorEnum_NotEmptyError.php
new file mode 100644
index 000000000..243313189
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/NotEmptyErrorEnum_NotEmptyError.php
@@ -0,0 +1,33 @@
+Google\Ads\Googleads\V0\Errors\NotEmptyErrorEnum\NotEmptyError
+ */
+class NotEmptyErrorEnum_NotEmptyError
+{
+ /**
+ * Enum unspecified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * The received error code is not known in this version.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * Empty list.
+ *
+ * Generated from protobuf enum EMPTY_LIST = 2;
+ */
+ const EMPTY_LIST = 2;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/NullErrorEnum.php b/src/Google/Ads/GoogleAds/V0/Errors/NullErrorEnum.php
new file mode 100644
index 000000000..428ae238e
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/NullErrorEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.errors.NullErrorEnum
+ */
+class NullErrorEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Errors\NullError::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/NullErrorEnum_NullError.php b/src/Google/Ads/GoogleAds/V0/Errors/NullErrorEnum_NullError.php
new file mode 100644
index 000000000..825a207fb
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/NullErrorEnum_NullError.php
@@ -0,0 +1,33 @@
+Google\Ads\Googleads\V0\Errors\NullErrorEnum\NullError
+ */
+class NullErrorEnum_NullError
+{
+ /**
+ * Enum unspecified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * The received error code is not known in this version.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * Specified list/container must not contain any null elements
+ *
+ * Generated from protobuf enum NULL_CONTENT = 2;
+ */
+ const NULL_CONTENT = 2;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/OperationAccessDeniedErrorEnum.php b/src/Google/Ads/GoogleAds/V0/Errors/OperationAccessDeniedErrorEnum.php
new file mode 100644
index 000000000..071ab2bf7
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/OperationAccessDeniedErrorEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.errors.OperationAccessDeniedErrorEnum
+ */
+class OperationAccessDeniedErrorEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Errors\OperationAccessDeniedError::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/OperationAccessDeniedErrorEnum_OperationAccessDeniedError.php b/src/Google/Ads/GoogleAds/V0/Errors/OperationAccessDeniedErrorEnum_OperationAccessDeniedError.php
new file mode 100644
index 000000000..55c785093
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/OperationAccessDeniedErrorEnum_OperationAccessDeniedError.php
@@ -0,0 +1,81 @@
+Google\Ads\Googleads\V0\Errors\OperationAccessDeniedErrorEnum\OperationAccessDeniedError
+ */
+class OperationAccessDeniedErrorEnum_OperationAccessDeniedError
+{
+ /**
+ * Enum unspecified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * The received error code is not known in this version.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * Unauthorized invocation of a service's method (get, mutate, etc.)
+ *
+ * Generated from protobuf enum ACTION_NOT_PERMITTED = 2;
+ */
+ const ACTION_NOT_PERMITTED = 2;
+ /**
+ * Unauthorized CREATE operation in invoking a service's mutate method.
+ *
+ * Generated from protobuf enum CREATE_OPERATION_NOT_PERMITTED = 3;
+ */
+ const CREATE_OPERATION_NOT_PERMITTED = 3;
+ /**
+ * Unauthorized REMOVE operation in invoking a service's mutate method.
+ *
+ * Generated from protobuf enum REMOVE_OPERATION_NOT_PERMITTED = 4;
+ */
+ const REMOVE_OPERATION_NOT_PERMITTED = 4;
+ /**
+ * Unauthorized UPDATE operation in invoking a service's mutate method.
+ *
+ * Generated from protobuf enum UPDATE_OPERATION_NOT_PERMITTED = 5;
+ */
+ const UPDATE_OPERATION_NOT_PERMITTED = 5;
+ /**
+ * A mutate action is not allowed on this campaign, from this client.
+ *
+ * Generated from protobuf enum MUTATE_ACTION_NOT_PERMITTED_FOR_CLIENT = 6;
+ */
+ const MUTATE_ACTION_NOT_PERMITTED_FOR_CLIENT = 6;
+ /**
+ * This operation is not permitted on this campaign type
+ *
+ * Generated from protobuf enum OPERATION_NOT_PERMITTED_FOR_CAMPAIGN_TYPE = 7;
+ */
+ const OPERATION_NOT_PERMITTED_FOR_CAMPAIGN_TYPE = 7;
+ /**
+ * A CREATE operation may not set status to REMOVED.
+ *
+ * Generated from protobuf enum CREATE_AS_REMOVED_NOT_PERMITTED = 8;
+ */
+ const CREATE_AS_REMOVED_NOT_PERMITTED = 8;
+ /**
+ * This operation is not allowed because the campaign or adgroup is removed.
+ *
+ * Generated from protobuf enum OPERATION_NOT_PERMITTED_FOR_REMOVED_RESOURCE = 9;
+ */
+ const OPERATION_NOT_PERMITTED_FOR_REMOVED_RESOURCE = 9;
+ /**
+ * This operation is not permitted on this ad group type.
+ *
+ * Generated from protobuf enum OPERATION_NOT_PERMITTED_FOR_AD_GROUP_TYPE = 10;
+ */
+ const OPERATION_NOT_PERMITTED_FOR_AD_GROUP_TYPE = 10;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/OperatorErrorEnum.php b/src/Google/Ads/GoogleAds/V0/Errors/OperatorErrorEnum.php
new file mode 100644
index 000000000..305892155
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/OperatorErrorEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.errors.OperatorErrorEnum
+ */
+class OperatorErrorEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Errors\OperatorError::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/OperatorErrorEnum_OperatorError.php b/src/Google/Ads/GoogleAds/V0/Errors/OperatorErrorEnum_OperatorError.php
new file mode 100644
index 000000000..fb3789f5f
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/OperatorErrorEnum_OperatorError.php
@@ -0,0 +1,33 @@
+Google\Ads\Googleads\V0\Errors\OperatorErrorEnum\OperatorError
+ */
+class OperatorErrorEnum_OperatorError
+{
+ /**
+ * Enum unspecified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * The received error code is not known in this version.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * Operator not supported.
+ *
+ * Generated from protobuf enum OPERATOR_NOT_SUPPORTED = 2;
+ */
+ const OPERATOR_NOT_SUPPORTED = 2;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/PolicyViolationDetails.php b/src/Google/Ads/GoogleAds/V0/Errors/PolicyViolationDetails.php
new file mode 100644
index 000000000..428af20d5
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/PolicyViolationDetails.php
@@ -0,0 +1,158 @@
+google.ads.googleads.v0.errors.PolicyViolationDetails
+ */
+class PolicyViolationDetails extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * Human readable description of policy violation.
+ *
+ * Generated from protobuf field string external_policy_description = 2;
+ */
+ private $external_policy_description = '';
+ /**
+ * Unique identifier for this violation.
+ * If policy is exemptible, this key may be used to request exemption.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.PolicyViolationKey key = 4;
+ */
+ private $key = null;
+ /**
+ * Human readable name of the policy.
+ *
+ * Generated from protobuf field string external_policy_name = 5;
+ */
+ private $external_policy_name = '';
+ /**
+ * Whether user can file an exemption request for this violation.
+ *
+ * Generated from protobuf field bool is_exemptible = 6;
+ */
+ private $is_exemptible = false;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Errors\Errors::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * Human readable description of policy violation.
+ *
+ * Generated from protobuf field string external_policy_description = 2;
+ * @return string
+ */
+ public function getExternalPolicyDescription()
+ {
+ return $this->external_policy_description;
+ }
+
+ /**
+ * Human readable description of policy violation.
+ *
+ * Generated from protobuf field string external_policy_description = 2;
+ * @param string $var
+ * @return $this
+ */
+ public function setExternalPolicyDescription($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->external_policy_description = $var;
+
+ return $this;
+ }
+
+ /**
+ * Unique identifier for this violation.
+ * If policy is exemptible, this key may be used to request exemption.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.PolicyViolationKey key = 4;
+ * @return \Google\Ads\GoogleAds\V0\Common\PolicyViolationKey
+ */
+ public function getKey()
+ {
+ return $this->key;
+ }
+
+ /**
+ * Unique identifier for this violation.
+ * If policy is exemptible, this key may be used to request exemption.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.PolicyViolationKey key = 4;
+ * @param \Google\Ads\GoogleAds\V0\Common\PolicyViolationKey $var
+ * @return $this
+ */
+ public function setKey($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Common\PolicyViolationKey::class);
+ $this->key = $var;
+
+ return $this;
+ }
+
+ /**
+ * Human readable name of the policy.
+ *
+ * Generated from protobuf field string external_policy_name = 5;
+ * @return string
+ */
+ public function getExternalPolicyName()
+ {
+ return $this->external_policy_name;
+ }
+
+ /**
+ * Human readable name of the policy.
+ *
+ * Generated from protobuf field string external_policy_name = 5;
+ * @param string $var
+ * @return $this
+ */
+ public function setExternalPolicyName($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->external_policy_name = $var;
+
+ return $this;
+ }
+
+ /**
+ * Whether user can file an exemption request for this violation.
+ *
+ * Generated from protobuf field bool is_exemptible = 6;
+ * @return bool
+ */
+ public function getIsExemptible()
+ {
+ return $this->is_exemptible;
+ }
+
+ /**
+ * Whether user can file an exemption request for this violation.
+ *
+ * Generated from protobuf field bool is_exemptible = 6;
+ * @param bool $var
+ * @return $this
+ */
+ public function setIsExemptible($var)
+ {
+ GPBUtil::checkBool($var);
+ $this->is_exemptible = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/QueryErrorEnum.php b/src/Google/Ads/GoogleAds/V0/Errors/QueryErrorEnum.php
new file mode 100644
index 000000000..e98e9aa8c
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/QueryErrorEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.errors.QueryErrorEnum
+ */
+class QueryErrorEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Errors\QueryError::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/QueryErrorEnum_QueryError.php b/src/Google/Ads/GoogleAds/V0/Errors/QueryErrorEnum_QueryError.php
new file mode 100644
index 000000000..08daf68a5
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/QueryErrorEnum_QueryError.php
@@ -0,0 +1,326 @@
+Google\Ads\Googleads\V0\Errors\QueryErrorEnum\QueryError
+ */
+class QueryErrorEnum_QueryError
+{
+ /**
+ * Name unspecified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * The received error code is not known in this version.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * Returned if all other query error reasons are not applicable.
+ *
+ * Generated from protobuf enum QUERY_ERROR = 50;
+ */
+ const QUERY_ERROR = 50;
+ /**
+ * A condition used in the query references an invalid enum constant.
+ *
+ * Generated from protobuf enum BAD_ENUM_CONSTANT = 18;
+ */
+ const BAD_ENUM_CONSTANT = 18;
+ /**
+ * Query contains an invalid escape sequence.
+ *
+ * Generated from protobuf enum BAD_ESCAPE_SEQUENCE = 7;
+ */
+ const BAD_ESCAPE_SEQUENCE = 7;
+ /**
+ * Field name is invalid.
+ *
+ * Generated from protobuf enum BAD_FIELD_NAME = 12;
+ */
+ const BAD_FIELD_NAME = 12;
+ /**
+ * Limit value is invalid (i.e. not a number)
+ *
+ * Generated from protobuf enum BAD_LIMIT_VALUE = 15;
+ */
+ const BAD_LIMIT_VALUE = 15;
+ /**
+ * Encountered number can not be parsed.
+ *
+ * Generated from protobuf enum BAD_NUMBER = 5;
+ */
+ const BAD_NUMBER = 5;
+ /**
+ * Invalid operator encountered.
+ *
+ * Generated from protobuf enum BAD_OPERATOR = 3;
+ */
+ const BAD_OPERATOR = 3;
+ /**
+ * Invalid resource type was specified in the FROM clause.
+ *
+ * Generated from protobuf enum BAD_RESOURCE_TYPE_IN_FROM_CLAUSE = 45;
+ */
+ const BAD_RESOURCE_TYPE_IN_FROM_CLAUSE = 45;
+ /**
+ * Non-ASCII symbol encountered outside of strings.
+ *
+ * Generated from protobuf enum BAD_SYMBOL = 2;
+ */
+ const BAD_SYMBOL = 2;
+ /**
+ * Value is invalid.
+ *
+ * Generated from protobuf enum BAD_VALUE = 4;
+ */
+ const BAD_VALUE = 4;
+ /**
+ * Date filters fail to restrict date to a range smaller than 31 days.
+ * Applicable if the query is segmented by date.
+ *
+ * Generated from protobuf enum DATE_RANGE_TOO_WIDE = 36;
+ */
+ const DATE_RANGE_TOO_WIDE = 36;
+ /**
+ * Expected AND between values with BETWEEN operator.
+ *
+ * Generated from protobuf enum EXPECTED_AND = 30;
+ */
+ const EXPECTED_AND = 30;
+ /**
+ * Expecting ORDER BY to have BY.
+ *
+ * Generated from protobuf enum EXPECTED_BY = 14;
+ */
+ const EXPECTED_BY = 14;
+ /**
+ * There was no dimension field selected.
+ *
+ * Generated from protobuf enum EXPECTED_DIMENSION_FIELD_IN_SELECT_CLAUSE = 37;
+ */
+ const EXPECTED_DIMENSION_FIELD_IN_SELECT_CLAUSE = 37;
+ /**
+ * Missing filters on date related fields.
+ *
+ * Generated from protobuf enum EXPECTED_FILTERS_ON_DATE_RANGE = 55;
+ */
+ const EXPECTED_FILTERS_ON_DATE_RANGE = 55;
+ /**
+ * Missing FROM clause.
+ *
+ * Generated from protobuf enum EXPECTED_FROM = 44;
+ */
+ const EXPECTED_FROM = 44;
+ /**
+ * The operator used in the conditions requires the value to be a list.
+ *
+ * Generated from protobuf enum EXPECTED_LIST = 41;
+ */
+ const EXPECTED_LIST = 41;
+ /**
+ * Fields used in WHERE or ORDER BY clauses are missing from the SELECT
+ * clause.
+ *
+ * Generated from protobuf enum EXPECTED_REFERENCED_FIELD_IN_SELECT_CLAUSE = 16;
+ */
+ const EXPECTED_REFERENCED_FIELD_IN_SELECT_CLAUSE = 16;
+ /**
+ * SELECT is missing at the beginning of query.
+ *
+ * Generated from protobuf enum EXPECTED_SELECT = 13;
+ */
+ const EXPECTED_SELECT = 13;
+ /**
+ * A list was passed as a value to a condition whose operator expects a
+ * single value.
+ *
+ * Generated from protobuf enum EXPECTED_SINGLE_VALUE = 42;
+ */
+ const EXPECTED_SINGLE_VALUE = 42;
+ /**
+ * Missing one or both values with BETWEEN operator.
+ *
+ * Generated from protobuf enum EXPECTED_VALUE_WITH_BETWEEN_OPERATOR = 29;
+ */
+ const EXPECTED_VALUE_WITH_BETWEEN_OPERATOR = 29;
+ /**
+ * Invalid date format. Expected 'YYYY-MM-DD'.
+ *
+ * Generated from protobuf enum INVALID_DATE_FORMAT = 38;
+ */
+ const INVALID_DATE_FORMAT = 38;
+ /**
+ * Value passed was not a string when it should have been. I.e., it was a
+ * number or unquoted literal.
+ *
+ * Generated from protobuf enum INVALID_STRING_VALUE = 57;
+ */
+ const INVALID_STRING_VALUE = 57;
+ /**
+ * A String value passed to the BETWEEN operator does not parse as a date.
+ *
+ * Generated from protobuf enum INVALID_VALUE_WITH_BETWEEN_OPERATOR = 26;
+ */
+ const INVALID_VALUE_WITH_BETWEEN_OPERATOR = 26;
+ /**
+ * The value passed to the DURING operator is not a Date range literal
+ *
+ * Generated from protobuf enum INVALID_VALUE_WITH_DURING_OPERATOR = 22;
+ */
+ const INVALID_VALUE_WITH_DURING_OPERATOR = 22;
+ /**
+ * A non-string value was passed to the LIKE operator.
+ *
+ * Generated from protobuf enum INVALID_VALUE_WITH_LIKE_OPERATOR = 56;
+ */
+ const INVALID_VALUE_WITH_LIKE_OPERATOR = 56;
+ /**
+ * An operator was provided that is inapplicable to the field being
+ * filtered.
+ *
+ * Generated from protobuf enum OPERATOR_FIELD_MISMATCH = 35;
+ */
+ const OPERATOR_FIELD_MISMATCH = 35;
+ /**
+ * A Condition was found with an empty list.
+ *
+ * Generated from protobuf enum PROHIBITED_EMPTY_LIST_IN_CONDITION = 28;
+ */
+ const PROHIBITED_EMPTY_LIST_IN_CONDITION = 28;
+ /**
+ * A condition used in the query references an unsupported enum constant.
+ *
+ * Generated from protobuf enum PROHIBITED_ENUM_CONSTANT = 54;
+ */
+ const PROHIBITED_ENUM_CONSTANT = 54;
+ /**
+ * Fields that are not allowed to be selected together were included in
+ * the SELECT clause.
+ *
+ * Generated from protobuf enum PROHIBITED_FIELD_COMBINATION_IN_SELECT_CLAUSE = 31;
+ */
+ const PROHIBITED_FIELD_COMBINATION_IN_SELECT_CLAUSE = 31;
+ /**
+ * A field that is not orderable was included in the ORDER BY clause.
+ *
+ * Generated from protobuf enum PROHIBITED_FIELD_IN_ORDER_BY_CLAUSE = 40;
+ */
+ const PROHIBITED_FIELD_IN_ORDER_BY_CLAUSE = 40;
+ /**
+ * A field that is not selectable was included in the SELECT clause.
+ *
+ * Generated from protobuf enum PROHIBITED_FIELD_IN_SELECT_CLAUSE = 23;
+ */
+ const PROHIBITED_FIELD_IN_SELECT_CLAUSE = 23;
+ /**
+ * A field that is not filterable was included in the WHERE clause.
+ *
+ * Generated from protobuf enum PROHIBITED_FIELD_IN_WHERE_CLAUSE = 24;
+ */
+ const PROHIBITED_FIELD_IN_WHERE_CLAUSE = 24;
+ /**
+ * Resource type specified in the FROM clause is not supported by this
+ * service.
+ *
+ * Generated from protobuf enum PROHIBITED_RESOURCE_TYPE_IN_FROM_CLAUSE = 43;
+ */
+ const PROHIBITED_RESOURCE_TYPE_IN_FROM_CLAUSE = 43;
+ /**
+ * A field that comes from an incompatible resource was included in the
+ * SELECT clause.
+ *
+ * Generated from protobuf enum PROHIBITED_RESOURCE_TYPE_IN_SELECT_CLAUSE = 48;
+ */
+ const PROHIBITED_RESOURCE_TYPE_IN_SELECT_CLAUSE = 48;
+ /**
+ * A metric incompatible with the main resource or other selected
+ * segmenting resources was included in the SELECT or WHERE clause.
+ *
+ * Generated from protobuf enum PROHIBITED_METRIC_IN_SELECT_OR_WHERE_CLAUSE = 49;
+ */
+ const PROHIBITED_METRIC_IN_SELECT_OR_WHERE_CLAUSE = 49;
+ /**
+ * A segment incompatible with the main resource or other selected
+ * segmenting resources was included in the SELECT or WHERE clause.
+ *
+ * Generated from protobuf enum PROHIBITED_SEGMENT_IN_SELECT_OR_WHERE_CLAUSE = 51;
+ */
+ const PROHIBITED_SEGMENT_IN_SELECT_OR_WHERE_CLAUSE = 51;
+ /**
+ * A segment in the SELECT clause is incompatible with a metric in the
+ * SELECT or WHERE clause.
+ *
+ * Generated from protobuf enum PROHIBITED_SEGMENT_WITH_METRIC_IN_SELECT_OR_WHERE_CLAUSE = 53;
+ */
+ const PROHIBITED_SEGMENT_WITH_METRIC_IN_SELECT_OR_WHERE_CLAUSE = 53;
+ /**
+ * The value passed to the limit clause is too low.
+ *
+ * Generated from protobuf enum LIMIT_VALUE_TOO_LOW = 25;
+ */
+ const LIMIT_VALUE_TOO_LOW = 25;
+ /**
+ * Query has a string containing a newline character.
+ *
+ * Generated from protobuf enum PROHIBITED_NEWLINE_IN_STRING = 8;
+ */
+ const PROHIBITED_NEWLINE_IN_STRING = 8;
+ /**
+ * List contains values of different types.
+ *
+ * Generated from protobuf enum PROHIBITED_VALUE_COMBINATION_IN_LIST = 10;
+ */
+ const PROHIBITED_VALUE_COMBINATION_IN_LIST = 10;
+ /**
+ * The values passed to the BETWEEN operator are not of the same type.
+ *
+ * Generated from protobuf enum PROHIBITED_VALUE_COMBINATION_WITH_BETWEEN_OPERATOR = 21;
+ */
+ const PROHIBITED_VALUE_COMBINATION_WITH_BETWEEN_OPERATOR = 21;
+ /**
+ * Query contains unterminated string.
+ *
+ * Generated from protobuf enum STRING_NOT_TERMINATED = 6;
+ */
+ const STRING_NOT_TERMINATED = 6;
+ /**
+ * Too many segments are specified in SELECT clause.
+ *
+ * Generated from protobuf enum TOO_MANY_SEGMENTS = 34;
+ */
+ const TOO_MANY_SEGMENTS = 34;
+ /**
+ * Query is incomplete and cannot be parsed.
+ *
+ * Generated from protobuf enum UNEXPECTED_END_OF_QUERY = 9;
+ */
+ const UNEXPECTED_END_OF_QUERY = 9;
+ /**
+ * FROM clause cannot be specified in this query.
+ *
+ * Generated from protobuf enum UNEXPECTED_FROM_CLAUSE = 47;
+ */
+ const UNEXPECTED_FROM_CLAUSE = 47;
+ /**
+ * Query contains one or more unrecognized fields.
+ *
+ * Generated from protobuf enum UNRECOGNIZED_FIELD = 32;
+ */
+ const UNRECOGNIZED_FIELD = 32;
+ /**
+ * Query has an unexpected extra part.
+ *
+ * Generated from protobuf enum UNEXPECTED_INPUT = 11;
+ */
+ const UNEXPECTED_INPUT = 11;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/QuotaErrorEnum.php b/src/Google/Ads/GoogleAds/V0/Errors/QuotaErrorEnum.php
new file mode 100644
index 000000000..d2f889d72
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/QuotaErrorEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.errors.QuotaErrorEnum
+ */
+class QuotaErrorEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Errors\QuotaError::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/QuotaErrorEnum_QuotaError.php b/src/Google/Ads/GoogleAds/V0/Errors/QuotaErrorEnum_QuotaError.php
new file mode 100644
index 000000000..433b2fa55
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/QuotaErrorEnum_QuotaError.php
@@ -0,0 +1,39 @@
+Google\Ads\Googleads\V0\Errors\QuotaErrorEnum\QuotaError
+ */
+class QuotaErrorEnum_QuotaError
+{
+ /**
+ * Enum unspecified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * The received error code is not known in this version.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * Too many requests.
+ *
+ * Generated from protobuf enum RESOURCE_EXHAUSTED = 2;
+ */
+ const RESOURCE_EXHAUSTED = 2;
+ /**
+ * Access is prohibited.
+ *
+ * Generated from protobuf enum ACCESS_PROHIBITED = 3;
+ */
+ const ACCESS_PROHIBITED = 3;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/RangeErrorEnum.php b/src/Google/Ads/GoogleAds/V0/Errors/RangeErrorEnum.php
new file mode 100644
index 000000000..fc404ddb8
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/RangeErrorEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.errors.RangeErrorEnum
+ */
+class RangeErrorEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Errors\RangeError::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/RangeErrorEnum_RangeError.php b/src/Google/Ads/GoogleAds/V0/Errors/RangeErrorEnum_RangeError.php
new file mode 100644
index 000000000..781bcee40
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/RangeErrorEnum_RangeError.php
@@ -0,0 +1,39 @@
+Google\Ads\Googleads\V0\Errors\RangeErrorEnum\RangeError
+ */
+class RangeErrorEnum_RangeError
+{
+ /**
+ * Enum unspecified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * The received error code is not known in this version.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * Too low.
+ *
+ * Generated from protobuf enum TOO_LOW = 2;
+ */
+ const TOO_LOW = 2;
+ /**
+ * Too high.
+ *
+ * Generated from protobuf enum TOO_HIGH = 3;
+ */
+ const TOO_HIGH = 3;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/RecommendationErrorEnum.php b/src/Google/Ads/GoogleAds/V0/Errors/RecommendationErrorEnum.php
new file mode 100644
index 000000000..c678e6143
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/RecommendationErrorEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.errors.RecommendationErrorEnum
+ */
+class RecommendationErrorEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Errors\RecommendationError::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/RecommendationErrorEnum_RecommendationError.php b/src/Google/Ads/GoogleAds/V0/Errors/RecommendationErrorEnum_RecommendationError.php
new file mode 100644
index 000000000..209680896
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/RecommendationErrorEnum_RecommendationError.php
@@ -0,0 +1,66 @@
+Google\Ads\Googleads\V0\Errors\RecommendationErrorEnum\RecommendationError
+ */
+class RecommendationErrorEnum_RecommendationError
+{
+ /**
+ * Enum unspecified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * The received error code is not known in this version.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * The specified budget amount is too low e.g. lower than minimum currency
+ * unit or lower than ad group minimum cost-per-click.
+ *
+ * Generated from protobuf enum BUDGET_AMOUNT_TOO_SMALL = 2;
+ */
+ const BUDGET_AMOUNT_TOO_SMALL = 2;
+ /**
+ * The specified budget amount is too large.
+ *
+ * Generated from protobuf enum BUDGET_AMOUNT_TOO_LARGE = 3;
+ */
+ const BUDGET_AMOUNT_TOO_LARGE = 3;
+ /**
+ * The specified budget amount is not a valid amount. e.g. not a multiple
+ * of minimum currency unit.
+ *
+ * Generated from protobuf enum INVALID_BUDGET_AMOUNT = 4;
+ */
+ const INVALID_BUDGET_AMOUNT = 4;
+ /**
+ * The specified keyword or ad violates ad policy.
+ *
+ * Generated from protobuf enum POLICY_ERROR = 5;
+ */
+ const POLICY_ERROR = 5;
+ /**
+ * The specified bid amount is not valid. e.g. too many fractional digits,
+ * or negative amount.
+ *
+ * Generated from protobuf enum INVALID_BID_AMOUNT = 6;
+ */
+ const INVALID_BID_AMOUNT = 6;
+ /**
+ * The number of keywords in ad group have reached the maximum allowed.
+ *
+ * Generated from protobuf enum ADGROUP_KEYWORD_LIMIT = 7;
+ */
+ const ADGROUP_KEYWORD_LIMIT = 7;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/RegionCodeErrorEnum.php b/src/Google/Ads/GoogleAds/V0/Errors/RegionCodeErrorEnum.php
new file mode 100644
index 000000000..aa4fe9b89
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/RegionCodeErrorEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.errors.RegionCodeErrorEnum
+ */
+class RegionCodeErrorEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Errors\RegionCodeError::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/RegionCodeErrorEnum_RegionCodeError.php b/src/Google/Ads/GoogleAds/V0/Errors/RegionCodeErrorEnum_RegionCodeError.php
new file mode 100644
index 000000000..cc58dcc3a
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/RegionCodeErrorEnum_RegionCodeError.php
@@ -0,0 +1,33 @@
+Google\Ads\Googleads\V0\Errors\RegionCodeErrorEnum\RegionCodeError
+ */
+class RegionCodeErrorEnum_RegionCodeError
+{
+ /**
+ * Enum unspecified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * The received error code is not known in this version.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * Invalid region code.
+ *
+ * Generated from protobuf enum INVALID_REGION_CODE = 2;
+ */
+ const INVALID_REGION_CODE = 2;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/RequestErrorEnum.php b/src/Google/Ads/GoogleAds/V0/Errors/RequestErrorEnum.php
new file mode 100644
index 000000000..fd4bb49ea
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/RequestErrorEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.errors.RequestErrorEnum
+ */
+class RequestErrorEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Errors\RequestError::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/RequestErrorEnum_RequestError.php b/src/Google/Ads/GoogleAds/V0/Errors/RequestErrorEnum_RequestError.php
new file mode 100644
index 000000000..d6113c935
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/RequestErrorEnum_RequestError.php
@@ -0,0 +1,120 @@
+Google\Ads\Googleads\V0\Errors\RequestErrorEnum\RequestError
+ */
+class RequestErrorEnum_RequestError
+{
+ /**
+ * Enum unspecified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * The received error code is not known in this version.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * Resource name is required for this request.
+ *
+ * Generated from protobuf enum RESOURCE_NAME_MISSING = 3;
+ */
+ const RESOURCE_NAME_MISSING = 3;
+ /**
+ * Resource name provided is malformed.
+ *
+ * Generated from protobuf enum RESOURCE_NAME_MALFORMED = 4;
+ */
+ const RESOURCE_NAME_MALFORMED = 4;
+ /**
+ * Resource name provided is malformed.
+ *
+ * Generated from protobuf enum BAD_RESOURCE_ID = 17;
+ */
+ const BAD_RESOURCE_ID = 17;
+ /**
+ * Customer ID is invalid.
+ *
+ * Generated from protobuf enum INVALID_CUSTOMER_ID = 16;
+ */
+ const INVALID_CUSTOMER_ID = 16;
+ /**
+ * Mutate operation should have either create, update, or remove specified.
+ *
+ * Generated from protobuf enum OPERATION_REQUIRED = 5;
+ */
+ const OPERATION_REQUIRED = 5;
+ /**
+ * Requested resource not found.
+ *
+ * Generated from protobuf enum RESOURCE_NOT_FOUND = 6;
+ */
+ const RESOURCE_NOT_FOUND = 6;
+ /**
+ * Next page token specified in user request is invalid.
+ *
+ * Generated from protobuf enum INVALID_PAGE_TOKEN = 7;
+ */
+ const INVALID_PAGE_TOKEN = 7;
+ /**
+ * Next page token specified in user request has expired.
+ *
+ * Generated from protobuf enum EXPIRED_PAGE_TOKEN = 8;
+ */
+ const EXPIRED_PAGE_TOKEN = 8;
+ /**
+ * Required field is missing.
+ *
+ * Generated from protobuf enum REQUIRED_FIELD_MISSING = 9;
+ */
+ const REQUIRED_FIELD_MISSING = 9;
+ /**
+ * The field cannot be modified because it's immutable. It's also possible
+ * that the field can be modified using 'create' operation but not 'update'.
+ *
+ * Generated from protobuf enum IMMUTABLE_FIELD = 11;
+ */
+ const IMMUTABLE_FIELD = 11;
+ /**
+ * Received too many entries in request.
+ *
+ * Generated from protobuf enum TOO_MANY_MUTATE_OPERATIONS = 13;
+ */
+ const TOO_MANY_MUTATE_OPERATIONS = 13;
+ /**
+ * Request cannot be executed by a manager account.
+ *
+ * Generated from protobuf enum CANNOT_BE_EXECUTED_BY_MANAGER_ACCOUNT = 14;
+ */
+ const CANNOT_BE_EXECUTED_BY_MANAGER_ACCOUNT = 14;
+ /**
+ * Mutate request was attempting to modify a readonly field.
+ * For instance, Budget fields can be requested for Ad Group,
+ * but are read-only for adGroups:mutate.
+ *
+ * Generated from protobuf enum CANNOT_MODIFY_FOREIGN_FIELD = 15;
+ */
+ const CANNOT_MODIFY_FOREIGN_FIELD = 15;
+ /**
+ * Enum value is not permitted.
+ *
+ * Generated from protobuf enum INVALID_ENUM_VALUE = 18;
+ */
+ const INVALID_ENUM_VALUE = 18;
+ /**
+ * The developer-token parameter is required for all requests.
+ *
+ * Generated from protobuf enum DEVELOPER_TOKEN_PARAMETER_MISSING = 19;
+ */
+ const DEVELOPER_TOKEN_PARAMETER_MISSING = 19;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/ResourceAccessDeniedErrorEnum.php b/src/Google/Ads/GoogleAds/V0/Errors/ResourceAccessDeniedErrorEnum.php
new file mode 100644
index 000000000..afa8a3979
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/ResourceAccessDeniedErrorEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.errors.ResourceAccessDeniedErrorEnum
+ */
+class ResourceAccessDeniedErrorEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Errors\ResourceAccessDeniedError::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/ResourceAccessDeniedErrorEnum_ResourceAccessDeniedError.php b/src/Google/Ads/GoogleAds/V0/Errors/ResourceAccessDeniedErrorEnum_ResourceAccessDeniedError.php
new file mode 100644
index 000000000..29305b787
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/ResourceAccessDeniedErrorEnum_ResourceAccessDeniedError.php
@@ -0,0 +1,33 @@
+Google\Ads\Googleads\V0\Errors\ResourceAccessDeniedErrorEnum\ResourceAccessDeniedError
+ */
+class ResourceAccessDeniedErrorEnum_ResourceAccessDeniedError
+{
+ /**
+ * Enum unspecified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * The received error code is not known in this version.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * User did not have write access.
+ *
+ * Generated from protobuf enum WRITE_ACCESS_DENIED = 3;
+ */
+ const WRITE_ACCESS_DENIED = 3;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/ResourceCountLimitExceededErrorEnum.php b/src/Google/Ads/GoogleAds/V0/Errors/ResourceCountLimitExceededErrorEnum.php
new file mode 100644
index 000000000..93e79ac29
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/ResourceCountLimitExceededErrorEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.errors.ResourceCountLimitExceededErrorEnum
+ */
+class ResourceCountLimitExceededErrorEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Errors\ResourceCountLimitExceededError::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/ResourceCountLimitExceededErrorEnum_ResourceCountLimitExceededError.php b/src/Google/Ads/GoogleAds/V0/Errors/ResourceCountLimitExceededErrorEnum_ResourceCountLimitExceededError.php
new file mode 100644
index 000000000..ab8a164ef
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/ResourceCountLimitExceededErrorEnum_ResourceCountLimitExceededError.php
@@ -0,0 +1,88 @@
+Google\Ads\Googleads\V0\Errors\ResourceCountLimitExceededErrorEnum\ResourceCountLimitExceededError
+ */
+class ResourceCountLimitExceededErrorEnum_ResourceCountLimitExceededError
+{
+ /**
+ * Enum unspecified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * The received error code is not known in this version.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * Indicates that this request would exceed the number of allowed resources
+ * for the AdWords account. The exact resource type and limit being checked
+ * can be inferred from accountLimitType.
+ *
+ * Generated from protobuf enum ACCOUNT_LIMIT = 2;
+ */
+ const ACCOUNT_LIMIT = 2;
+ /**
+ * Indicates that this request would exceed the number of allowed resources
+ * in a Campaign. The exact resource type and limit being checked can be
+ * inferred from accountLimitType, and the numeric id of the
+ * Campaign involved is given by enclosingId.
+ *
+ * Generated from protobuf enum CAMPAIGN_LIMIT = 3;
+ */
+ const CAMPAIGN_LIMIT = 3;
+ /**
+ * Indicates that this request would exceed the number of allowed resources
+ * in an ad group. The exact resource type and limit being checked can be
+ * inferred from accountLimitType, and the numeric id of the
+ * ad group involved is given by enclosingId.
+ *
+ * Generated from protobuf enum ADGROUP_LIMIT = 4;
+ */
+ const ADGROUP_LIMIT = 4;
+ /**
+ * Indicates that this request would exceed the number of allowed resources
+ * in an ad group ad. The exact resource type and limit being checked can
+ * be inferred from accountLimitType, and the enclosingId
+ * contains the ad group id followed by the ad id, separated by a single
+ * comma (,).
+ *
+ * Generated from protobuf enum AD_GROUP_AD_LIMIT = 5;
+ */
+ const AD_GROUP_AD_LIMIT = 5;
+ /**
+ * Indicates that this request would exceed the number of allowed resources
+ * in an ad group criterion. The exact resource type and limit being checked
+ * can be inferred from accountLimitType, and the
+ * enclosingId contains the ad group id followed by the
+ * criterion id, separated by a single comma (,).
+ *
+ * Generated from protobuf enum AD_GROUP_CRITERION_LIMIT = 6;
+ */
+ const AD_GROUP_CRITERION_LIMIT = 6;
+ /**
+ * Indicates that this request would exceed the number of allowed resources
+ * in this shared set. The exact resource type and limit being checked can
+ * be inferred from accountLimitType, and the numeric id of the
+ * shared set involved is given by enclosingId.
+ *
+ * Generated from protobuf enum SHARED_SET_LIMIT = 7;
+ */
+ const SHARED_SET_LIMIT = 7;
+ /**
+ * Exceeds a limit related to a matching function.
+ *
+ * Generated from protobuf enum MATCHING_FUNCTION_LIMIT = 8;
+ */
+ const MATCHING_FUNCTION_LIMIT = 8;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/SettingErrorEnum.php b/src/Google/Ads/GoogleAds/V0/Errors/SettingErrorEnum.php
new file mode 100644
index 000000000..365eb6054
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/SettingErrorEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.errors.SettingErrorEnum
+ */
+class SettingErrorEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Errors\SettingError::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/SettingErrorEnum_SettingError.php b/src/Google/Ads/GoogleAds/V0/Errors/SettingErrorEnum_SettingError.php
new file mode 100644
index 000000000..b9a42e9d5
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/SettingErrorEnum_SettingError.php
@@ -0,0 +1,139 @@
+Google\Ads\Googleads\V0\Errors\SettingErrorEnum\SettingError
+ */
+class SettingErrorEnum_SettingError
+{
+ /**
+ * Enum unspecified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * The received error code is not known in this version.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * The campaign setting is not available for this AdWords account.
+ *
+ * Generated from protobuf enum SETTING_TYPE_IS_NOT_AVAILABLE = 3;
+ */
+ const SETTING_TYPE_IS_NOT_AVAILABLE = 3;
+ /**
+ * The setting is not compatible with the campaign.
+ *
+ * Generated from protobuf enum SETTING_TYPE_IS_NOT_COMPATIBLE_WITH_CAMPAIGN = 4;
+ */
+ const SETTING_TYPE_IS_NOT_COMPATIBLE_WITH_CAMPAIGN = 4;
+ /**
+ * The supplied TargetingSetting contains an invalid CriterionTypeGroup. See
+ * CriterionTypeGroup documentation for CriterionTypeGroups allowed
+ * in Campaign or AdGroup TargetingSettings.
+ *
+ * Generated from protobuf enum TARGETING_SETTING_CONTAINS_INVALID_CRITERION_TYPE_GROUP = 5;
+ */
+ const TARGETING_SETTING_CONTAINS_INVALID_CRITERION_TYPE_GROUP = 5;
+ /**
+ * TargetingSetting must not explicitly
+ * set any of the Demographic CriterionTypeGroups (AGE_RANGE, GENDER,
+ * PARENT, INCOME_RANGE) to false (it's okay to not set them at all, in
+ * which case the system will set them to true automatically).
+ *
+ * Generated from protobuf enum TARGETING_SETTING_DEMOGRAPHIC_CRITERION_TYPE_GROUPS_MUST_BE_SET_TO_TARGET_ALL = 6;
+ */
+ const TARGETING_SETTING_DEMOGRAPHIC_CRITERION_TYPE_GROUPS_MUST_BE_SET_TO_TARGET_ALL = 6;
+ /**
+ * TargetingSetting cannot change any of
+ * the Demographic CriterionTypeGroups (AGE_RANGE, GENDER, PARENT,
+ * INCOME_RANGE) from true to false.
+ *
+ * Generated from protobuf enum TARGETING_SETTING_CANNOT_CHANGE_TARGET_ALL_TO_FALSE_FOR_DEMOGRAPHIC_CRITERION_TYPE_GROUP = 7;
+ */
+ const TARGETING_SETTING_CANNOT_CHANGE_TARGET_ALL_TO_FALSE_FOR_DEMOGRAPHIC_CRITERION_TYPE_GROUP = 7;
+ /**
+ * At least one feed id should be present.
+ *
+ * Generated from protobuf enum DYNAMIC_SEARCH_ADS_SETTING_AT_LEAST_ONE_FEED_ID_MUST_BE_PRESENT = 8;
+ */
+ const DYNAMIC_SEARCH_ADS_SETTING_AT_LEAST_ONE_FEED_ID_MUST_BE_PRESENT = 8;
+ /**
+ * The supplied DynamicSearchAdsSetting contains an invalid domain name.
+ *
+ * Generated from protobuf enum DYNAMIC_SEARCH_ADS_SETTING_CONTAINS_INVALID_DOMAIN_NAME = 9;
+ */
+ const DYNAMIC_SEARCH_ADS_SETTING_CONTAINS_INVALID_DOMAIN_NAME = 9;
+ /**
+ * The supplied DynamicSearchAdsSetting contains a subdomain name.
+ *
+ * Generated from protobuf enum DYNAMIC_SEARCH_ADS_SETTING_CONTAINS_SUBDOMAIN_NAME = 10;
+ */
+ const DYNAMIC_SEARCH_ADS_SETTING_CONTAINS_SUBDOMAIN_NAME = 10;
+ /**
+ * The supplied DynamicSearchAdsSetting contains an invalid language code.
+ *
+ * Generated from protobuf enum DYNAMIC_SEARCH_ADS_SETTING_CONTAINS_INVALID_LANGUAGE_CODE = 11;
+ */
+ const DYNAMIC_SEARCH_ADS_SETTING_CONTAINS_INVALID_LANGUAGE_CODE = 11;
+ /**
+ * TargetingSettings in search campaigns should not have
+ * CriterionTypeGroup.PLACEMENT set to targetAll.
+ *
+ * Generated from protobuf enum TARGET_ALL_IS_NOT_ALLOWED_FOR_PLACEMENT_IN_SEARCH_CAMPAIGN = 12;
+ */
+ const TARGET_ALL_IS_NOT_ALLOWED_FOR_PLACEMENT_IN_SEARCH_CAMPAIGN = 12;
+ /**
+ * Duplicate description in universal app setting description field.
+ *
+ * Generated from protobuf enum UNIVERSAL_APP_CAMPAIGN_SETTING_DUPLICATE_DESCRIPTION = 13;
+ */
+ const UNIVERSAL_APP_CAMPAIGN_SETTING_DUPLICATE_DESCRIPTION = 13;
+ /**
+ * Description line width is too long in universal app setting description
+ * field.
+ *
+ * Generated from protobuf enum UNIVERSAL_APP_CAMPAIGN_SETTING_DESCRIPTION_LINE_WIDTH_TOO_LONG = 14;
+ */
+ const UNIVERSAL_APP_CAMPAIGN_SETTING_DESCRIPTION_LINE_WIDTH_TOO_LONG = 14;
+ /**
+ * Universal app setting appId field cannot be modified for COMPLETE
+ * campaigns.
+ *
+ * Generated from protobuf enum UNIVERSAL_APP_CAMPAIGN_SETTING_APP_ID_CANNOT_BE_MODIFIED = 15;
+ */
+ const UNIVERSAL_APP_CAMPAIGN_SETTING_APP_ID_CANNOT_BE_MODIFIED = 15;
+ /**
+ * YoutubeVideoMediaIds in universal app setting cannot exceed size limit.
+ *
+ * Generated from protobuf enum TOO_MANY_YOUTUBE_MEDIA_IDS_IN_UNIVERSAL_APP_CAMPAIGN = 16;
+ */
+ const TOO_MANY_YOUTUBE_MEDIA_IDS_IN_UNIVERSAL_APP_CAMPAIGN = 16;
+ /**
+ * ImageMediaIds in universal app setting cannot exceed size limit.
+ *
+ * Generated from protobuf enum TOO_MANY_IMAGE_MEDIA_IDS_IN_UNIVERSAL_APP_CAMPAIGN = 17;
+ */
+ const TOO_MANY_IMAGE_MEDIA_IDS_IN_UNIVERSAL_APP_CAMPAIGN = 17;
+ /**
+ * Media is incompatible for universal app campaign.
+ *
+ * Generated from protobuf enum MEDIA_INCOMPATIBLE_FOR_UNIVERSAL_APP_CAMPAIGN = 18;
+ */
+ const MEDIA_INCOMPATIBLE_FOR_UNIVERSAL_APP_CAMPAIGN = 18;
+ /**
+ * Too many exclamation marks in universal app campaign ad text ideas.
+ *
+ * Generated from protobuf enum TOO_MANY_EXCLAMATION_MARKS = 19;
+ */
+ const TOO_MANY_EXCLAMATION_MARKS = 19;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/StringFormatErrorEnum.php b/src/Google/Ads/GoogleAds/V0/Errors/StringFormatErrorEnum.php
new file mode 100644
index 000000000..c3da35b10
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/StringFormatErrorEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.errors.StringFormatErrorEnum
+ */
+class StringFormatErrorEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Errors\StringFormatError::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/StringFormatErrorEnum_StringFormatError.php b/src/Google/Ads/GoogleAds/V0/Errors/StringFormatErrorEnum_StringFormatError.php
new file mode 100644
index 000000000..a7a7a1329
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/StringFormatErrorEnum_StringFormatError.php
@@ -0,0 +1,39 @@
+Google\Ads\Googleads\V0\Errors\StringFormatErrorEnum\StringFormatError
+ */
+class StringFormatErrorEnum_StringFormatError
+{
+ /**
+ * Enum unspecified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * The received error code is not known in this version.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * The input string value contains disallowed characters.
+ *
+ * Generated from protobuf enum ILLEGAL_CHARS = 2;
+ */
+ const ILLEGAL_CHARS = 2;
+ /**
+ * The input string value is invalid for the associated field.
+ *
+ * Generated from protobuf enum INVALID_FORMAT = 3;
+ */
+ const INVALID_FORMAT = 3;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/StringLengthErrorEnum.php b/src/Google/Ads/GoogleAds/V0/Errors/StringLengthErrorEnum.php
new file mode 100644
index 000000000..f3d9b1120
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/StringLengthErrorEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.errors.StringLengthErrorEnum
+ */
+class StringLengthErrorEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Errors\StringLengthError::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/StringLengthErrorEnum_StringLengthError.php b/src/Google/Ads/GoogleAds/V0/Errors/StringLengthErrorEnum_StringLengthError.php
new file mode 100644
index 000000000..e275327af
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/StringLengthErrorEnum_StringLengthError.php
@@ -0,0 +1,39 @@
+Google\Ads\Googleads\V0\Errors\StringLengthErrorEnum\StringLengthError
+ */
+class StringLengthErrorEnum_StringLengthError
+{
+ /**
+ * Enum unspecified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * The received error code is not known in this version.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * Too short.
+ *
+ * Generated from protobuf enum TOO_SHORT = 2;
+ */
+ const TOO_SHORT = 2;
+ /**
+ * Too long.
+ *
+ * Generated from protobuf enum TOO_LONG = 3;
+ */
+ const TOO_LONG = 3;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/UrlFieldErrorEnum.php b/src/Google/Ads/GoogleAds/V0/Errors/UrlFieldErrorEnum.php
new file mode 100644
index 000000000..0236d32b1
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/UrlFieldErrorEnum.php
@@ -0,0 +1,25 @@
+google.ads.googleads.v0.errors.UrlFieldErrorEnum
+ */
+class UrlFieldErrorEnum extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Errors\UrlFieldError::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Errors/UrlFieldErrorEnum_UrlFieldError.php b/src/Google/Ads/GoogleAds/V0/Errors/UrlFieldErrorEnum_UrlFieldError.php
new file mode 100644
index 000000000..2ab3171c3
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Errors/UrlFieldErrorEnum_UrlFieldError.php
@@ -0,0 +1,304 @@
+Google\Ads\Googleads\V0\Errors\UrlFieldErrorEnum\UrlFieldError
+ */
+class UrlFieldErrorEnum_UrlFieldError
+{
+ /**
+ * Enum unspecified.
+ *
+ * Generated from protobuf enum UNSPECIFIED = 0;
+ */
+ const UNSPECIFIED = 0;
+ /**
+ * The received error code is not known in this version.
+ *
+ * Generated from protobuf enum UNKNOWN = 1;
+ */
+ const UNKNOWN = 1;
+ /**
+ * The tracking url template is invalid.
+ *
+ * Generated from protobuf enum INVALID_TRACKING_URL_TEMPLATE = 2;
+ */
+ const INVALID_TRACKING_URL_TEMPLATE = 2;
+ /**
+ * The tracking url template contains invalid tag.
+ *
+ * Generated from protobuf enum INVALID_TAG_IN_TRACKING_URL_TEMPLATE = 3;
+ */
+ const INVALID_TAG_IN_TRACKING_URL_TEMPLATE = 3;
+ /**
+ * The tracking url template must contain at least one tag (e.g. {lpurl}),
+ * This applies only to tracking url template associated with website ads or
+ * product ads.
+ *
+ * Generated from protobuf enum MISSING_TRACKING_URL_TEMPLATE_TAG = 4;
+ */
+ const MISSING_TRACKING_URL_TEMPLATE_TAG = 4;
+ /**
+ * The tracking url template must start with a valid protocol (or lpurl
+ * tag).
+ *
+ * Generated from protobuf enum MISSING_PROTOCOL_IN_TRACKING_URL_TEMPLATE = 5;
+ */
+ const MISSING_PROTOCOL_IN_TRACKING_URL_TEMPLATE = 5;
+ /**
+ * The tracking url template starts with an invalid protocol.
+ *
+ * Generated from protobuf enum INVALID_PROTOCOL_IN_TRACKING_URL_TEMPLATE = 6;
+ */
+ const INVALID_PROTOCOL_IN_TRACKING_URL_TEMPLATE = 6;
+ /**
+ * The tracking url template contains illegal characters.
+ *
+ * Generated from protobuf enum MALFORMED_TRACKING_URL_TEMPLATE = 7;
+ */
+ const MALFORMED_TRACKING_URL_TEMPLATE = 7;
+ /**
+ * The tracking url template must contain a host name (or lpurl tag).
+ *
+ * Generated from protobuf enum MISSING_HOST_IN_TRACKING_URL_TEMPLATE = 8;
+ */
+ const MISSING_HOST_IN_TRACKING_URL_TEMPLATE = 8;
+ /**
+ * The tracking url template has an invalid or missing top level domain
+ * extension.
+ *
+ * Generated from protobuf enum INVALID_TLD_IN_TRACKING_URL_TEMPLATE = 9;
+ */
+ const INVALID_TLD_IN_TRACKING_URL_TEMPLATE = 9;
+ /**
+ * The tracking url template contains nested occurrences of the same
+ * conditional tag (i.e. {ifmobile:{ifmobile:x}}).
+ *
+ * Generated from protobuf enum REDUNDANT_NESTED_TRACKING_URL_TEMPLATE_TAG = 10;
+ */
+ const REDUNDANT_NESTED_TRACKING_URL_TEMPLATE_TAG = 10;
+ /**
+ * The final url is invalid.
+ *
+ * Generated from protobuf enum INVALID_FINAL_URL = 11;
+ */
+ const INVALID_FINAL_URL = 11;
+ /**
+ * The final url contains invalid tag.
+ *
+ * Generated from protobuf enum INVALID_TAG_IN_FINAL_URL = 12;
+ */
+ const INVALID_TAG_IN_FINAL_URL = 12;
+ /**
+ * The final url contains nested occurrences of the same conditional tag
+ * (i.e. {ifmobile:{ifmobile:x}}).
+ *
+ * Generated from protobuf enum REDUNDANT_NESTED_FINAL_URL_TAG = 13;
+ */
+ const REDUNDANT_NESTED_FINAL_URL_TAG = 13;
+ /**
+ * The final url must start with a valid protocol.
+ *
+ * Generated from protobuf enum MISSING_PROTOCOL_IN_FINAL_URL = 14;
+ */
+ const MISSING_PROTOCOL_IN_FINAL_URL = 14;
+ /**
+ * The final url starts with an invalid protocol.
+ *
+ * Generated from protobuf enum INVALID_PROTOCOL_IN_FINAL_URL = 15;
+ */
+ const INVALID_PROTOCOL_IN_FINAL_URL = 15;
+ /**
+ * The final url contains illegal characters.
+ *
+ * Generated from protobuf enum MALFORMED_FINAL_URL = 16;
+ */
+ const MALFORMED_FINAL_URL = 16;
+ /**
+ * The final url must contain a host name.
+ *
+ * Generated from protobuf enum MISSING_HOST_IN_FINAL_URL = 17;
+ */
+ const MISSING_HOST_IN_FINAL_URL = 17;
+ /**
+ * The tracking url template has an invalid or missing top level domain
+ * extension.
+ *
+ * Generated from protobuf enum INVALID_TLD_IN_FINAL_URL = 18;
+ */
+ const INVALID_TLD_IN_FINAL_URL = 18;
+ /**
+ * The final mobile url is invalid.
+ *
+ * Generated from protobuf enum INVALID_FINAL_MOBILE_URL = 19;
+ */
+ const INVALID_FINAL_MOBILE_URL = 19;
+ /**
+ * The final mobile url contains invalid tag.
+ *
+ * Generated from protobuf enum INVALID_TAG_IN_FINAL_MOBILE_URL = 20;
+ */
+ const INVALID_TAG_IN_FINAL_MOBILE_URL = 20;
+ /**
+ * The final mobile url contains nested occurrences of the same conditional
+ * tag (i.e. {ifmobile:{ifmobile:x}}).
+ *
+ * Generated from protobuf enum REDUNDANT_NESTED_FINAL_MOBILE_URL_TAG = 21;
+ */
+ const REDUNDANT_NESTED_FINAL_MOBILE_URL_TAG = 21;
+ /**
+ * The final mobile url must start with a valid protocol.
+ *
+ * Generated from protobuf enum MISSING_PROTOCOL_IN_FINAL_MOBILE_URL = 22;
+ */
+ const MISSING_PROTOCOL_IN_FINAL_MOBILE_URL = 22;
+ /**
+ * The final mobile url starts with an invalid protocol.
+ *
+ * Generated from protobuf enum INVALID_PROTOCOL_IN_FINAL_MOBILE_URL = 23;
+ */
+ const INVALID_PROTOCOL_IN_FINAL_MOBILE_URL = 23;
+ /**
+ * The final mobile url contains illegal characters.
+ *
+ * Generated from protobuf enum MALFORMED_FINAL_MOBILE_URL = 24;
+ */
+ const MALFORMED_FINAL_MOBILE_URL = 24;
+ /**
+ * The final mobile url must contain a host name.
+ *
+ * Generated from protobuf enum MISSING_HOST_IN_FINAL_MOBILE_URL = 25;
+ */
+ const MISSING_HOST_IN_FINAL_MOBILE_URL = 25;
+ /**
+ * The tracking url template has an invalid or missing top level domain
+ * extension.
+ *
+ * Generated from protobuf enum INVALID_TLD_IN_FINAL_MOBILE_URL = 26;
+ */
+ const INVALID_TLD_IN_FINAL_MOBILE_URL = 26;
+ /**
+ * The final app url is invalid.
+ *
+ * Generated from protobuf enum INVALID_FINAL_APP_URL = 27;
+ */
+ const INVALID_FINAL_APP_URL = 27;
+ /**
+ * The final app url contains invalid tag.
+ *
+ * Generated from protobuf enum INVALID_TAG_IN_FINAL_APP_URL = 28;
+ */
+ const INVALID_TAG_IN_FINAL_APP_URL = 28;
+ /**
+ * The final app url contains nested occurrences of the same conditional tag
+ * (i.e. {ifmobile:{ifmobile:x}}).
+ *
+ * Generated from protobuf enum REDUNDANT_NESTED_FINAL_APP_URL_TAG = 29;
+ */
+ const REDUNDANT_NESTED_FINAL_APP_URL_TAG = 29;
+ /**
+ * More than one app url found for the same OS type.
+ *
+ * Generated from protobuf enum MULTIPLE_APP_URLS_FOR_OSTYPE = 30;
+ */
+ const MULTIPLE_APP_URLS_FOR_OSTYPE = 30;
+ /**
+ * The OS type given for an app url is not valid.
+ *
+ * Generated from protobuf enum INVALID_OSTYPE = 31;
+ */
+ const INVALID_OSTYPE = 31;
+ /**
+ * The protocol given for an app url is not valid. (E.g. "android-app://")
+ *
+ * Generated from protobuf enum INVALID_PROTOCOL_FOR_APP_URL = 32;
+ */
+ const INVALID_PROTOCOL_FOR_APP_URL = 32;
+ /**
+ * The package id (app id) given for an app url is not valid.
+ *
+ * Generated from protobuf enum INVALID_PACKAGE_ID_FOR_APP_URL = 33;
+ */
+ const INVALID_PACKAGE_ID_FOR_APP_URL = 33;
+ /**
+ * The number of url custom parameters for an resource exceeds the maximum
+ * limit allowed.
+ *
+ * Generated from protobuf enum URL_CUSTOM_PARAMETERS_COUNT_EXCEEDS_LIMIT = 34;
+ */
+ const URL_CUSTOM_PARAMETERS_COUNT_EXCEEDS_LIMIT = 34;
+ /**
+ * An invalid character appears in the parameter key.
+ *
+ * Generated from protobuf enum INVALID_CHARACTERS_IN_URL_CUSTOM_PARAMETER_KEY = 39;
+ */
+ const INVALID_CHARACTERS_IN_URL_CUSTOM_PARAMETER_KEY = 39;
+ /**
+ * An invalid character appears in the parameter value.
+ *
+ * Generated from protobuf enum INVALID_CHARACTERS_IN_URL_CUSTOM_PARAMETER_VALUE = 40;
+ */
+ const INVALID_CHARACTERS_IN_URL_CUSTOM_PARAMETER_VALUE = 40;
+ /**
+ * The url custom parameter value fails url tag validation.
+ *
+ * Generated from protobuf enum INVALID_TAG_IN_URL_CUSTOM_PARAMETER_VALUE = 41;
+ */
+ const INVALID_TAG_IN_URL_CUSTOM_PARAMETER_VALUE = 41;
+ /**
+ * The custom parameter contains nested occurrences of the same conditional
+ * tag (i.e. {ifmobile:{ifmobile:x}}).
+ *
+ * Generated from protobuf enum REDUNDANT_NESTED_URL_CUSTOM_PARAMETER_TAG = 42;
+ */
+ const REDUNDANT_NESTED_URL_CUSTOM_PARAMETER_TAG = 42;
+ /**
+ * The protocol (http:// or https://) is missing.
+ *
+ * Generated from protobuf enum MISSING_PROTOCOL = 43;
+ */
+ const MISSING_PROTOCOL = 43;
+ /**
+ * The url is invalid.
+ *
+ * Generated from protobuf enum INVALID_URL = 44;
+ */
+ const INVALID_URL = 44;
+ /**
+ * Destination Url is deprecated.
+ *
+ * Generated from protobuf enum DESTINATION_URL_DEPRECATED = 45;
+ */
+ const DESTINATION_URL_DEPRECATED = 45;
+ /**
+ * The url contains invalid tag.
+ *
+ * Generated from protobuf enum INVALID_TAG_IN_URL = 46;
+ */
+ const INVALID_TAG_IN_URL = 46;
+ /**
+ * The url must contain at least one tag (e.g. {lpurl}), This applies only
+ * to urls associated with website ads or product ads.
+ *
+ * Generated from protobuf enum MISSING_URL_TAG = 47;
+ */
+ const MISSING_URL_TAG = 47;
+ /**
+ * Duplicate url id.
+ *
+ * Generated from protobuf enum DUPLICATE_URL_ID = 48;
+ */
+ const DUPLICATE_URL_ID = 48;
+ /**
+ * Invalid url id.
+ *
+ * Generated from protobuf enum INVALID_URL_ID = 49;
+ */
+ const INVALID_URL_ID = 49;
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Resources/AdGroup.php b/src/Google/Ads/GoogleAds/V0/Resources/AdGroup.php
new file mode 100644
index 000000000..fa94a18c8
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Resources/AdGroup.php
@@ -0,0 +1,477 @@
+google.ads.googleads.v0.resources.AdGroup
+ */
+class AdGroup extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The resource name of the ad group.
+ * Ad group resource names have the form:
+ * `customers/{customer_id}/adGroups/{ad_group_id}`
+ *
+ * Generated from protobuf field string resource_name = 1;
+ */
+ private $resource_name = '';
+ /**
+ * The ID of the ad group.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value id = 3;
+ */
+ private $id = null;
+ /**
+ * The name of the ad group.
+ * This field is required and should not be empty when creating new ad
+ * groups.
+ * It must contain fewer than 255 UTF-8 full-width characters.
+ * It must not contain any null (code point 0x0), NL line feed
+ * (code point 0xA) or carriage return (code point 0xD) characters.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue name = 4;
+ */
+ private $name = null;
+ /**
+ * The status of the ad group.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.AdGroupStatusEnum.AdGroupStatus status = 5;
+ */
+ private $status = 0;
+ /**
+ * The type of the ad group.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.AdGroupTypeEnum.AdGroupType type = 12;
+ */
+ private $type = 0;
+ /**
+ * The URL template for constructing a tracking URL.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue tracking_url_template = 13;
+ */
+ private $tracking_url_template = null;
+ /**
+ * The list of mappings used to substitute custom parameter tags in a
+ * `tracking_url_template`, `final_urls`, or `mobile_final_urls`.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.common.CustomParameter url_custom_parameters = 6;
+ */
+ private $url_custom_parameters;
+ /**
+ * The campaign to which the ad group belongs.
+ * This field must not be used in WHERE clauses.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue campaign = 10;
+ */
+ private $campaign = null;
+ /**
+ * The maximum CPC (cost-per-click) bid.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value cpc_bid_micros = 14;
+ */
+ private $cpc_bid_micros = null;
+ /**
+ * The maximum CPM (cost-per-thousand viewable impressions) bid.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value cpm_bid_micros = 15;
+ */
+ private $cpm_bid_micros = null;
+ /**
+ * The target cost-per-acquisition (conversion) bid.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value cpa_bid_micros = 16;
+ */
+ private $cpa_bid_micros = null;
+ /**
+ * The CPV (cost-per-view) bid.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value cpv_bid_micros = 17;
+ */
+ private $cpv_bid_micros = null;
+ /**
+ * The target return on ad spend (ROAS) override. If the ad group's campaign
+ * bidding strategy is a standard Target ROAS strategy, then this field
+ * overrides the target ROAS specified in the campaign's bidding strategy.
+ * Otherwise, this value is ignored.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue target_roas_override = 19;
+ */
+ private $target_roas_override = null;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Resources\AdGroup::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * The resource name of the ad group.
+ * Ad group resource names have the form:
+ * `customers/{customer_id}/adGroups/{ad_group_id}`
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @return string
+ */
+ public function getResourceName()
+ {
+ return $this->resource_name;
+ }
+
+ /**
+ * The resource name of the ad group.
+ * Ad group resource names have the form:
+ * `customers/{customer_id}/adGroups/{ad_group_id}`
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @param string $var
+ * @return $this
+ */
+ public function setResourceName($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->resource_name = $var;
+
+ return $this;
+ }
+
+ /**
+ * The ID of the ad group.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value id = 3;
+ * @return \Google\Protobuf\Int64Value
+ */
+ public function getId()
+ {
+ return $this->id;
+ }
+
+ /**
+ * The ID of the ad group.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value id = 3;
+ * @param \Google\Protobuf\Int64Value $var
+ * @return $this
+ */
+ public function setId($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Int64Value::class);
+ $this->id = $var;
+
+ return $this;
+ }
+
+ /**
+ * The name of the ad group.
+ * This field is required and should not be empty when creating new ad
+ * groups.
+ * It must contain fewer than 255 UTF-8 full-width characters.
+ * It must not contain any null (code point 0x0), NL line feed
+ * (code point 0xA) or carriage return (code point 0xD) characters.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue name = 4;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getName()
+ {
+ return $this->name;
+ }
+
+ /**
+ * The name of the ad group.
+ * This field is required and should not be empty when creating new ad
+ * groups.
+ * It must contain fewer than 255 UTF-8 full-width characters.
+ * It must not contain any null (code point 0x0), NL line feed
+ * (code point 0xA) or carriage return (code point 0xD) characters.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue name = 4;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setName($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->name = $var;
+
+ return $this;
+ }
+
+ /**
+ * The status of the ad group.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.AdGroupStatusEnum.AdGroupStatus status = 5;
+ * @return int
+ */
+ public function getStatus()
+ {
+ return $this->status;
+ }
+
+ /**
+ * The status of the ad group.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.AdGroupStatusEnum.AdGroupStatus status = 5;
+ * @param int $var
+ * @return $this
+ */
+ public function setStatus($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Enums\AdGroupStatusEnum_AdGroupStatus::class);
+ $this->status = $var;
+
+ return $this;
+ }
+
+ /**
+ * The type of the ad group.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.AdGroupTypeEnum.AdGroupType type = 12;
+ * @return int
+ */
+ public function getType()
+ {
+ return $this->type;
+ }
+
+ /**
+ * The type of the ad group.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.AdGroupTypeEnum.AdGroupType type = 12;
+ * @param int $var
+ * @return $this
+ */
+ public function setType($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Enums\AdGroupTypeEnum_AdGroupType::class);
+ $this->type = $var;
+
+ return $this;
+ }
+
+ /**
+ * The URL template for constructing a tracking URL.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue tracking_url_template = 13;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getTrackingUrlTemplate()
+ {
+ return $this->tracking_url_template;
+ }
+
+ /**
+ * The URL template for constructing a tracking URL.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue tracking_url_template = 13;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setTrackingUrlTemplate($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->tracking_url_template = $var;
+
+ return $this;
+ }
+
+ /**
+ * The list of mappings used to substitute custom parameter tags in a
+ * `tracking_url_template`, `final_urls`, or `mobile_final_urls`.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.common.CustomParameter url_custom_parameters = 6;
+ * @return \Google\Protobuf\Internal\RepeatedField
+ */
+ public function getUrlCustomParameters()
+ {
+ return $this->url_custom_parameters;
+ }
+
+ /**
+ * The list of mappings used to substitute custom parameter tags in a
+ * `tracking_url_template`, `final_urls`, or `mobile_final_urls`.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.common.CustomParameter url_custom_parameters = 6;
+ * @param \Google\Ads\GoogleAds\V0\Common\CustomParameter[]|\Google\Protobuf\Internal\RepeatedField $var
+ * @return $this
+ */
+ public function setUrlCustomParameters($var)
+ {
+ $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Ads\GoogleAds\V0\Common\CustomParameter::class);
+ $this->url_custom_parameters = $arr;
+
+ return $this;
+ }
+
+ /**
+ * The campaign to which the ad group belongs.
+ * This field must not be used in WHERE clauses.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue campaign = 10;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getCampaign()
+ {
+ return $this->campaign;
+ }
+
+ /**
+ * The campaign to which the ad group belongs.
+ * This field must not be used in WHERE clauses.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue campaign = 10;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setCampaign($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->campaign = $var;
+
+ return $this;
+ }
+
+ /**
+ * The maximum CPC (cost-per-click) bid.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value cpc_bid_micros = 14;
+ * @return \Google\Protobuf\Int64Value
+ */
+ public function getCpcBidMicros()
+ {
+ return $this->cpc_bid_micros;
+ }
+
+ /**
+ * The maximum CPC (cost-per-click) bid.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value cpc_bid_micros = 14;
+ * @param \Google\Protobuf\Int64Value $var
+ * @return $this
+ */
+ public function setCpcBidMicros($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Int64Value::class);
+ $this->cpc_bid_micros = $var;
+
+ return $this;
+ }
+
+ /**
+ * The maximum CPM (cost-per-thousand viewable impressions) bid.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value cpm_bid_micros = 15;
+ * @return \Google\Protobuf\Int64Value
+ */
+ public function getCpmBidMicros()
+ {
+ return $this->cpm_bid_micros;
+ }
+
+ /**
+ * The maximum CPM (cost-per-thousand viewable impressions) bid.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value cpm_bid_micros = 15;
+ * @param \Google\Protobuf\Int64Value $var
+ * @return $this
+ */
+ public function setCpmBidMicros($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Int64Value::class);
+ $this->cpm_bid_micros = $var;
+
+ return $this;
+ }
+
+ /**
+ * The target cost-per-acquisition (conversion) bid.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value cpa_bid_micros = 16;
+ * @return \Google\Protobuf\Int64Value
+ */
+ public function getCpaBidMicros()
+ {
+ return $this->cpa_bid_micros;
+ }
+
+ /**
+ * The target cost-per-acquisition (conversion) bid.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value cpa_bid_micros = 16;
+ * @param \Google\Protobuf\Int64Value $var
+ * @return $this
+ */
+ public function setCpaBidMicros($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Int64Value::class);
+ $this->cpa_bid_micros = $var;
+
+ return $this;
+ }
+
+ /**
+ * The CPV (cost-per-view) bid.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value cpv_bid_micros = 17;
+ * @return \Google\Protobuf\Int64Value
+ */
+ public function getCpvBidMicros()
+ {
+ return $this->cpv_bid_micros;
+ }
+
+ /**
+ * The CPV (cost-per-view) bid.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value cpv_bid_micros = 17;
+ * @param \Google\Protobuf\Int64Value $var
+ * @return $this
+ */
+ public function setCpvBidMicros($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Int64Value::class);
+ $this->cpv_bid_micros = $var;
+
+ return $this;
+ }
+
+ /**
+ * The target return on ad spend (ROAS) override. If the ad group's campaign
+ * bidding strategy is a standard Target ROAS strategy, then this field
+ * overrides the target ROAS specified in the campaign's bidding strategy.
+ * Otherwise, this value is ignored.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue target_roas_override = 19;
+ * @return \Google\Protobuf\DoubleValue
+ */
+ public function getTargetRoasOverride()
+ {
+ return $this->target_roas_override;
+ }
+
+ /**
+ * The target return on ad spend (ROAS) override. If the ad group's campaign
+ * bidding strategy is a standard Target ROAS strategy, then this field
+ * overrides the target ROAS specified in the campaign's bidding strategy.
+ * Otherwise, this value is ignored.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue target_roas_override = 19;
+ * @param \Google\Protobuf\DoubleValue $var
+ * @return $this
+ */
+ public function setTargetRoasOverride($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\DoubleValue::class);
+ $this->target_roas_override = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Resources/AdGroupAd.php b/src/Google/Ads/GoogleAds/V0/Resources/AdGroupAd.php
new file mode 100644
index 000000000..7e6bee4c7
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Resources/AdGroupAd.php
@@ -0,0 +1,162 @@
+google.ads.googleads.v0.resources.AdGroupAd
+ */
+class AdGroupAd extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The resource name of the ad.
+ * Ad group ad resource names have the form:
+ * `customers/{customer_id}/adGroupAds/{ad_group_id}_{ad_id}`
+ *
+ * Generated from protobuf field string resource_name = 1;
+ */
+ private $resource_name = '';
+ /**
+ * The status of the ad.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.AdGroupAdStatusEnum.AdGroupAdStatus status = 3;
+ */
+ private $status = 0;
+ /**
+ * The ad group to which the ad belongs.
+ * This field must not be used in WHERE clauses.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue ad_group = 4;
+ */
+ private $ad_group = null;
+ /**
+ * The ad.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.Ad ad = 5;
+ */
+ private $ad = null;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Resources\AdGroupAd::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * The resource name of the ad.
+ * Ad group ad resource names have the form:
+ * `customers/{customer_id}/adGroupAds/{ad_group_id}_{ad_id}`
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @return string
+ */
+ public function getResourceName()
+ {
+ return $this->resource_name;
+ }
+
+ /**
+ * The resource name of the ad.
+ * Ad group ad resource names have the form:
+ * `customers/{customer_id}/adGroupAds/{ad_group_id}_{ad_id}`
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @param string $var
+ * @return $this
+ */
+ public function setResourceName($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->resource_name = $var;
+
+ return $this;
+ }
+
+ /**
+ * The status of the ad.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.AdGroupAdStatusEnum.AdGroupAdStatus status = 3;
+ * @return int
+ */
+ public function getStatus()
+ {
+ return $this->status;
+ }
+
+ /**
+ * The status of the ad.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.AdGroupAdStatusEnum.AdGroupAdStatus status = 3;
+ * @param int $var
+ * @return $this
+ */
+ public function setStatus($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Enums\AdGroupAdStatusEnum_AdGroupAdStatus::class);
+ $this->status = $var;
+
+ return $this;
+ }
+
+ /**
+ * The ad group to which the ad belongs.
+ * This field must not be used in WHERE clauses.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue ad_group = 4;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getAdGroup()
+ {
+ return $this->ad_group;
+ }
+
+ /**
+ * The ad group to which the ad belongs.
+ * This field must not be used in WHERE clauses.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue ad_group = 4;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setAdGroup($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->ad_group = $var;
+
+ return $this;
+ }
+
+ /**
+ * The ad.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.Ad ad = 5;
+ * @return \Google\Ads\GoogleAds\V0\Common\Ad
+ */
+ public function getAd()
+ {
+ return $this->ad;
+ }
+
+ /**
+ * The ad.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.Ad ad = 5;
+ * @param \Google\Ads\GoogleAds\V0\Common\Ad $var
+ * @return $this
+ */
+ public function setAd($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Common\Ad::class);
+ $this->ad = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Resources/AdGroupBidModifier.php b/src/Google/Ads/GoogleAds/V0/Resources/AdGroupBidModifier.php
new file mode 100644
index 000000000..3937c488b
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Resources/AdGroupBidModifier.php
@@ -0,0 +1,278 @@
+google.ads.googleads.v0.resources.AdGroupBidModifier
+ */
+class AdGroupBidModifier extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The resource name of the ad group bid modifier.
+ * Ad group bid modifier resource names have the form:
+ * `customers/{customer_id}/adGroupBidModifiers/{ad_group_id}_{criterion_id}`
+ *
+ * Generated from protobuf field string resource_name = 1;
+ */
+ private $resource_name = '';
+ /**
+ * The ad group to which this criterion belongs.
+ * This field must not be used in WHERE clauses.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue ad_group = 2;
+ */
+ private $ad_group = null;
+ /**
+ * The ID of the criterion to bid modify.
+ * This field is ignored for mutates.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value criterion_id = 3;
+ */
+ private $criterion_id = null;
+ /**
+ * The modifier for the bid when the criterion matches.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue bid_modifier = 4;
+ */
+ private $bid_modifier = null;
+ protected $criterion;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Resources\AdGroupBidModifier::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * The resource name of the ad group bid modifier.
+ * Ad group bid modifier resource names have the form:
+ * `customers/{customer_id}/adGroupBidModifiers/{ad_group_id}_{criterion_id}`
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @return string
+ */
+ public function getResourceName()
+ {
+ return $this->resource_name;
+ }
+
+ /**
+ * The resource name of the ad group bid modifier.
+ * Ad group bid modifier resource names have the form:
+ * `customers/{customer_id}/adGroupBidModifiers/{ad_group_id}_{criterion_id}`
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @param string $var
+ * @return $this
+ */
+ public function setResourceName($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->resource_name = $var;
+
+ return $this;
+ }
+
+ /**
+ * The ad group to which this criterion belongs.
+ * This field must not be used in WHERE clauses.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue ad_group = 2;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getAdGroup()
+ {
+ return $this->ad_group;
+ }
+
+ /**
+ * The ad group to which this criterion belongs.
+ * This field must not be used in WHERE clauses.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue ad_group = 2;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setAdGroup($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->ad_group = $var;
+
+ return $this;
+ }
+
+ /**
+ * The ID of the criterion to bid modify.
+ * This field is ignored for mutates.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value criterion_id = 3;
+ * @return \Google\Protobuf\Int64Value
+ */
+ public function getCriterionId()
+ {
+ return $this->criterion_id;
+ }
+
+ /**
+ * The ID of the criterion to bid modify.
+ * This field is ignored for mutates.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value criterion_id = 3;
+ * @param \Google\Protobuf\Int64Value $var
+ * @return $this
+ */
+ public function setCriterionId($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Int64Value::class);
+ $this->criterion_id = $var;
+
+ return $this;
+ }
+
+ /**
+ * The modifier for the bid when the criterion matches.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue bid_modifier = 4;
+ * @return \Google\Protobuf\DoubleValue
+ */
+ public function getBidModifier()
+ {
+ return $this->bid_modifier;
+ }
+
+ /**
+ * The modifier for the bid when the criterion matches.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue bid_modifier = 4;
+ * @param \Google\Protobuf\DoubleValue $var
+ * @return $this
+ */
+ public function setBidModifier($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\DoubleValue::class);
+ $this->bid_modifier = $var;
+
+ return $this;
+ }
+
+ /**
+ * Criterion for hotel date selection (default dates vs. user selected).
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.HotelDateSelectionTypeInfo hotel_date_selection_type = 5;
+ * @return \Google\Ads\GoogleAds\V0\Common\HotelDateSelectionTypeInfo
+ */
+ public function getHotelDateSelectionType()
+ {
+ return $this->readOneof(5);
+ }
+
+ /**
+ * Criterion for hotel date selection (default dates vs. user selected).
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.HotelDateSelectionTypeInfo hotel_date_selection_type = 5;
+ * @param \Google\Ads\GoogleAds\V0\Common\HotelDateSelectionTypeInfo $var
+ * @return $this
+ */
+ public function setHotelDateSelectionType($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Common\HotelDateSelectionTypeInfo::class);
+ $this->writeOneof(5, $var);
+
+ return $this;
+ }
+
+ /**
+ * Criterion for number of days prior to the stay the booking is being made.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.HotelAdvanceBookingWindowInfo hotel_advance_booking_window = 6;
+ * @return \Google\Ads\GoogleAds\V0\Common\HotelAdvanceBookingWindowInfo
+ */
+ public function getHotelAdvanceBookingWindow()
+ {
+ return $this->readOneof(6);
+ }
+
+ /**
+ * Criterion for number of days prior to the stay the booking is being made.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.HotelAdvanceBookingWindowInfo hotel_advance_booking_window = 6;
+ * @param \Google\Ads\GoogleAds\V0\Common\HotelAdvanceBookingWindowInfo $var
+ * @return $this
+ */
+ public function setHotelAdvanceBookingWindow($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Common\HotelAdvanceBookingWindowInfo::class);
+ $this->writeOneof(6, $var);
+
+ return $this;
+ }
+
+ /**
+ * Criterion for length of hotel stay in nights.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.HotelLengthOfStayInfo hotel_length_of_stay = 7;
+ * @return \Google\Ads\GoogleAds\V0\Common\HotelLengthOfStayInfo
+ */
+ public function getHotelLengthOfStay()
+ {
+ return $this->readOneof(7);
+ }
+
+ /**
+ * Criterion for length of hotel stay in nights.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.HotelLengthOfStayInfo hotel_length_of_stay = 7;
+ * @param \Google\Ads\GoogleAds\V0\Common\HotelLengthOfStayInfo $var
+ * @return $this
+ */
+ public function setHotelLengthOfStay($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Common\HotelLengthOfStayInfo::class);
+ $this->writeOneof(7, $var);
+
+ return $this;
+ }
+
+ /**
+ * Criterion for day of the week the booking is for.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.HotelCheckInDayInfo hotel_check_in_day = 8;
+ * @return \Google\Ads\GoogleAds\V0\Common\HotelCheckInDayInfo
+ */
+ public function getHotelCheckInDay()
+ {
+ return $this->readOneof(8);
+ }
+
+ /**
+ * Criterion for day of the week the booking is for.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.HotelCheckInDayInfo hotel_check_in_day = 8;
+ * @param \Google\Ads\GoogleAds\V0\Common\HotelCheckInDayInfo $var
+ * @return $this
+ */
+ public function setHotelCheckInDay($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Common\HotelCheckInDayInfo::class);
+ $this->writeOneof(8, $var);
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getCriterion()
+ {
+ return $this->whichOneof("criterion");
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Resources/AdGroupCriterion.php b/src/Google/Ads/GoogleAds/V0/Resources/AdGroupCriterion.php
new file mode 100644
index 000000000..0dcd552b4
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Resources/AdGroupCriterion.php
@@ -0,0 +1,750 @@
+google.ads.googleads.v0.resources.AdGroupCriterion
+ */
+class AdGroupCriterion extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The resource name of the ad group criterion.
+ * Ad group criterion resource names have the form:
+ * `customers/{customer_id}/adGroupCriteria/{ad_group_id}_{criterion_id}`
+ *
+ * Generated from protobuf field string resource_name = 1;
+ */
+ private $resource_name = '';
+ /**
+ * The ID of the criterion.
+ * This field is ignored for mutates.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value criterion_id = 26;
+ */
+ private $criterion_id = null;
+ /**
+ * The status of the criterion.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.AdGroupCriterionStatusEnum.AdGroupCriterionStatus status = 3;
+ */
+ private $status = 0;
+ /**
+ * Information regarding the quality of the criterion.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.AdGroupCriterion.QualityInfo quality_info = 4;
+ */
+ private $quality_info = null;
+ /**
+ * The ad group to which the criterion belongs.
+ * This field must not be used in WHERE clauses.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue ad_group = 5;
+ */
+ private $ad_group = null;
+ /**
+ * The type of the criterion.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.CriterionTypeEnum.CriterionType type = 25;
+ */
+ private $type = 0;
+ /**
+ * Whether to target (`false`) or exclude (`true`) the criterion.
+ * This field is immutable. To switch a criterion from positive to negative,
+ * remove then re-add it.
+ *
+ * Generated from protobuf field .google.protobuf.BoolValue negative = 31;
+ */
+ private $negative = null;
+ /**
+ * The CPC (cost-per-click) bid.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value cpc_bid_micros = 16;
+ */
+ private $cpc_bid_micros = null;
+ /**
+ * The CPM (cost-per-thousand viewable impressions) bid.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value cpm_bid_micros = 17;
+ */
+ private $cpm_bid_micros = null;
+ /**
+ * The CPV (cost-per-view) bid.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value cpv_bid_micros = 24;
+ */
+ private $cpv_bid_micros = null;
+ /**
+ * The effective CPC (cost-per-click) bid.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value effective_cpc_bid_micros = 18;
+ */
+ private $effective_cpc_bid_micros = null;
+ /**
+ * The effective CPM (cost-per-thousand viewable impressions) bid.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value effective_cpm_bid_micros = 19;
+ */
+ private $effective_cpm_bid_micros = null;
+ /**
+ * The effective CPV (cost-per-view) bid.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value effective_cpv_bid_micros = 20;
+ */
+ private $effective_cpv_bid_micros = null;
+ /**
+ * Source of the effective CPC bid.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.BiddingSourceEnum.BiddingSource effective_cpc_bid_source = 21;
+ */
+ private $effective_cpc_bid_source = 0;
+ /**
+ * Source of the effective CPM bid.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.BiddingSourceEnum.BiddingSource effective_cpm_bid_source = 22;
+ */
+ private $effective_cpm_bid_source = 0;
+ /**
+ * Source of the effective CPV bid.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.BiddingSourceEnum.BiddingSource effective_cpv_bid_source = 23;
+ */
+ private $effective_cpv_bid_source = 0;
+ /**
+ * Estimates for criterion bids at various positions.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.AdGroupCriterion.PositionEstimates position_estimates = 10;
+ */
+ private $position_estimates = null;
+ /**
+ * The list of possible final URLs after all cross-domain redirects for the
+ * ad.
+ *
+ * Generated from protobuf field repeated .google.protobuf.StringValue final_urls = 11;
+ */
+ private $final_urls;
+ /**
+ * The URL template for constructing a tracking URL.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue tracking_url_template = 13;
+ */
+ private $tracking_url_template = null;
+ /**
+ * The list of mappings used to substitute custom parameter tags in a
+ * `tracking_url_template`, `final_urls`, or `mobile_final_urls`.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.common.CustomParameter url_custom_parameters = 14;
+ */
+ private $url_custom_parameters;
+ protected $criterion;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Resources\AdGroupCriterion::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * The resource name of the ad group criterion.
+ * Ad group criterion resource names have the form:
+ * `customers/{customer_id}/adGroupCriteria/{ad_group_id}_{criterion_id}`
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @return string
+ */
+ public function getResourceName()
+ {
+ return $this->resource_name;
+ }
+
+ /**
+ * The resource name of the ad group criterion.
+ * Ad group criterion resource names have the form:
+ * `customers/{customer_id}/adGroupCriteria/{ad_group_id}_{criterion_id}`
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @param string $var
+ * @return $this
+ */
+ public function setResourceName($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->resource_name = $var;
+
+ return $this;
+ }
+
+ /**
+ * The ID of the criterion.
+ * This field is ignored for mutates.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value criterion_id = 26;
+ * @return \Google\Protobuf\Int64Value
+ */
+ public function getCriterionId()
+ {
+ return $this->criterion_id;
+ }
+
+ /**
+ * The ID of the criterion.
+ * This field is ignored for mutates.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value criterion_id = 26;
+ * @param \Google\Protobuf\Int64Value $var
+ * @return $this
+ */
+ public function setCriterionId($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Int64Value::class);
+ $this->criterion_id = $var;
+
+ return $this;
+ }
+
+ /**
+ * The status of the criterion.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.AdGroupCriterionStatusEnum.AdGroupCriterionStatus status = 3;
+ * @return int
+ */
+ public function getStatus()
+ {
+ return $this->status;
+ }
+
+ /**
+ * The status of the criterion.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.AdGroupCriterionStatusEnum.AdGroupCriterionStatus status = 3;
+ * @param int $var
+ * @return $this
+ */
+ public function setStatus($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Enums\AdGroupCriterionStatusEnum_AdGroupCriterionStatus::class);
+ $this->status = $var;
+
+ return $this;
+ }
+
+ /**
+ * Information regarding the quality of the criterion.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.AdGroupCriterion.QualityInfo quality_info = 4;
+ * @return \Google\Ads\GoogleAds\V0\Resources\AdGroupCriterion_QualityInfo
+ */
+ public function getQualityInfo()
+ {
+ return $this->quality_info;
+ }
+
+ /**
+ * Information regarding the quality of the criterion.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.AdGroupCriterion.QualityInfo quality_info = 4;
+ * @param \Google\Ads\GoogleAds\V0\Resources\AdGroupCriterion_QualityInfo $var
+ * @return $this
+ */
+ public function setQualityInfo($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Resources\AdGroupCriterion_QualityInfo::class);
+ $this->quality_info = $var;
+
+ return $this;
+ }
+
+ /**
+ * The ad group to which the criterion belongs.
+ * This field must not be used in WHERE clauses.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue ad_group = 5;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getAdGroup()
+ {
+ return $this->ad_group;
+ }
+
+ /**
+ * The ad group to which the criterion belongs.
+ * This field must not be used in WHERE clauses.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue ad_group = 5;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setAdGroup($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->ad_group = $var;
+
+ return $this;
+ }
+
+ /**
+ * The type of the criterion.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.CriterionTypeEnum.CriterionType type = 25;
+ * @return int
+ */
+ public function getType()
+ {
+ return $this->type;
+ }
+
+ /**
+ * The type of the criterion.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.CriterionTypeEnum.CriterionType type = 25;
+ * @param int $var
+ * @return $this
+ */
+ public function setType($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Enums\CriterionTypeEnum_CriterionType::class);
+ $this->type = $var;
+
+ return $this;
+ }
+
+ /**
+ * Whether to target (`false`) or exclude (`true`) the criterion.
+ * This field is immutable. To switch a criterion from positive to negative,
+ * remove then re-add it.
+ *
+ * Generated from protobuf field .google.protobuf.BoolValue negative = 31;
+ * @return \Google\Protobuf\BoolValue
+ */
+ public function getNegative()
+ {
+ return $this->negative;
+ }
+
+ /**
+ * Whether to target (`false`) or exclude (`true`) the criterion.
+ * This field is immutable. To switch a criterion from positive to negative,
+ * remove then re-add it.
+ *
+ * Generated from protobuf field .google.protobuf.BoolValue negative = 31;
+ * @param \Google\Protobuf\BoolValue $var
+ * @return $this
+ */
+ public function setNegative($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\BoolValue::class);
+ $this->negative = $var;
+
+ return $this;
+ }
+
+ /**
+ * The CPC (cost-per-click) bid.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value cpc_bid_micros = 16;
+ * @return \Google\Protobuf\Int64Value
+ */
+ public function getCpcBidMicros()
+ {
+ return $this->cpc_bid_micros;
+ }
+
+ /**
+ * The CPC (cost-per-click) bid.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value cpc_bid_micros = 16;
+ * @param \Google\Protobuf\Int64Value $var
+ * @return $this
+ */
+ public function setCpcBidMicros($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Int64Value::class);
+ $this->cpc_bid_micros = $var;
+
+ return $this;
+ }
+
+ /**
+ * The CPM (cost-per-thousand viewable impressions) bid.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value cpm_bid_micros = 17;
+ * @return \Google\Protobuf\Int64Value
+ */
+ public function getCpmBidMicros()
+ {
+ return $this->cpm_bid_micros;
+ }
+
+ /**
+ * The CPM (cost-per-thousand viewable impressions) bid.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value cpm_bid_micros = 17;
+ * @param \Google\Protobuf\Int64Value $var
+ * @return $this
+ */
+ public function setCpmBidMicros($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Int64Value::class);
+ $this->cpm_bid_micros = $var;
+
+ return $this;
+ }
+
+ /**
+ * The CPV (cost-per-view) bid.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value cpv_bid_micros = 24;
+ * @return \Google\Protobuf\Int64Value
+ */
+ public function getCpvBidMicros()
+ {
+ return $this->cpv_bid_micros;
+ }
+
+ /**
+ * The CPV (cost-per-view) bid.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value cpv_bid_micros = 24;
+ * @param \Google\Protobuf\Int64Value $var
+ * @return $this
+ */
+ public function setCpvBidMicros($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Int64Value::class);
+ $this->cpv_bid_micros = $var;
+
+ return $this;
+ }
+
+ /**
+ * The effective CPC (cost-per-click) bid.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value effective_cpc_bid_micros = 18;
+ * @return \Google\Protobuf\Int64Value
+ */
+ public function getEffectiveCpcBidMicros()
+ {
+ return $this->effective_cpc_bid_micros;
+ }
+
+ /**
+ * The effective CPC (cost-per-click) bid.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value effective_cpc_bid_micros = 18;
+ * @param \Google\Protobuf\Int64Value $var
+ * @return $this
+ */
+ public function setEffectiveCpcBidMicros($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Int64Value::class);
+ $this->effective_cpc_bid_micros = $var;
+
+ return $this;
+ }
+
+ /**
+ * The effective CPM (cost-per-thousand viewable impressions) bid.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value effective_cpm_bid_micros = 19;
+ * @return \Google\Protobuf\Int64Value
+ */
+ public function getEffectiveCpmBidMicros()
+ {
+ return $this->effective_cpm_bid_micros;
+ }
+
+ /**
+ * The effective CPM (cost-per-thousand viewable impressions) bid.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value effective_cpm_bid_micros = 19;
+ * @param \Google\Protobuf\Int64Value $var
+ * @return $this
+ */
+ public function setEffectiveCpmBidMicros($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Int64Value::class);
+ $this->effective_cpm_bid_micros = $var;
+
+ return $this;
+ }
+
+ /**
+ * The effective CPV (cost-per-view) bid.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value effective_cpv_bid_micros = 20;
+ * @return \Google\Protobuf\Int64Value
+ */
+ public function getEffectiveCpvBidMicros()
+ {
+ return $this->effective_cpv_bid_micros;
+ }
+
+ /**
+ * The effective CPV (cost-per-view) bid.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value effective_cpv_bid_micros = 20;
+ * @param \Google\Protobuf\Int64Value $var
+ * @return $this
+ */
+ public function setEffectiveCpvBidMicros($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Int64Value::class);
+ $this->effective_cpv_bid_micros = $var;
+
+ return $this;
+ }
+
+ /**
+ * Source of the effective CPC bid.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.BiddingSourceEnum.BiddingSource effective_cpc_bid_source = 21;
+ * @return int
+ */
+ public function getEffectiveCpcBidSource()
+ {
+ return $this->effective_cpc_bid_source;
+ }
+
+ /**
+ * Source of the effective CPC bid.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.BiddingSourceEnum.BiddingSource effective_cpc_bid_source = 21;
+ * @param int $var
+ * @return $this
+ */
+ public function setEffectiveCpcBidSource($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Enums\BiddingSourceEnum_BiddingSource::class);
+ $this->effective_cpc_bid_source = $var;
+
+ return $this;
+ }
+
+ /**
+ * Source of the effective CPM bid.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.BiddingSourceEnum.BiddingSource effective_cpm_bid_source = 22;
+ * @return int
+ */
+ public function getEffectiveCpmBidSource()
+ {
+ return $this->effective_cpm_bid_source;
+ }
+
+ /**
+ * Source of the effective CPM bid.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.BiddingSourceEnum.BiddingSource effective_cpm_bid_source = 22;
+ * @param int $var
+ * @return $this
+ */
+ public function setEffectiveCpmBidSource($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Enums\BiddingSourceEnum_BiddingSource::class);
+ $this->effective_cpm_bid_source = $var;
+
+ return $this;
+ }
+
+ /**
+ * Source of the effective CPV bid.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.BiddingSourceEnum.BiddingSource effective_cpv_bid_source = 23;
+ * @return int
+ */
+ public function getEffectiveCpvBidSource()
+ {
+ return $this->effective_cpv_bid_source;
+ }
+
+ /**
+ * Source of the effective CPV bid.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.BiddingSourceEnum.BiddingSource effective_cpv_bid_source = 23;
+ * @param int $var
+ * @return $this
+ */
+ public function setEffectiveCpvBidSource($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Enums\BiddingSourceEnum_BiddingSource::class);
+ $this->effective_cpv_bid_source = $var;
+
+ return $this;
+ }
+
+ /**
+ * Estimates for criterion bids at various positions.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.AdGroupCriterion.PositionEstimates position_estimates = 10;
+ * @return \Google\Ads\GoogleAds\V0\Resources\AdGroupCriterion_PositionEstimates
+ */
+ public function getPositionEstimates()
+ {
+ return $this->position_estimates;
+ }
+
+ /**
+ * Estimates for criterion bids at various positions.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.AdGroupCriterion.PositionEstimates position_estimates = 10;
+ * @param \Google\Ads\GoogleAds\V0\Resources\AdGroupCriterion_PositionEstimates $var
+ * @return $this
+ */
+ public function setPositionEstimates($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Resources\AdGroupCriterion_PositionEstimates::class);
+ $this->position_estimates = $var;
+
+ return $this;
+ }
+
+ /**
+ * The list of possible final URLs after all cross-domain redirects for the
+ * ad.
+ *
+ * Generated from protobuf field repeated .google.protobuf.StringValue final_urls = 11;
+ * @return \Google\Protobuf\Internal\RepeatedField
+ */
+ public function getFinalUrls()
+ {
+ return $this->final_urls;
+ }
+
+ /**
+ * The list of possible final URLs after all cross-domain redirects for the
+ * ad.
+ *
+ * Generated from protobuf field repeated .google.protobuf.StringValue final_urls = 11;
+ * @param \Google\Protobuf\StringValue[]|\Google\Protobuf\Internal\RepeatedField $var
+ * @return $this
+ */
+ public function setFinalUrls($var)
+ {
+ $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\StringValue::class);
+ $this->final_urls = $arr;
+
+ return $this;
+ }
+
+ /**
+ * The URL template for constructing a tracking URL.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue tracking_url_template = 13;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getTrackingUrlTemplate()
+ {
+ return $this->tracking_url_template;
+ }
+
+ /**
+ * The URL template for constructing a tracking URL.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue tracking_url_template = 13;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setTrackingUrlTemplate($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->tracking_url_template = $var;
+
+ return $this;
+ }
+
+ /**
+ * The list of mappings used to substitute custom parameter tags in a
+ * `tracking_url_template`, `final_urls`, or `mobile_final_urls`.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.common.CustomParameter url_custom_parameters = 14;
+ * @return \Google\Protobuf\Internal\RepeatedField
+ */
+ public function getUrlCustomParameters()
+ {
+ return $this->url_custom_parameters;
+ }
+
+ /**
+ * The list of mappings used to substitute custom parameter tags in a
+ * `tracking_url_template`, `final_urls`, or `mobile_final_urls`.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.common.CustomParameter url_custom_parameters = 14;
+ * @param \Google\Ads\GoogleAds\V0\Common\CustomParameter[]|\Google\Protobuf\Internal\RepeatedField $var
+ * @return $this
+ */
+ public function setUrlCustomParameters($var)
+ {
+ $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Ads\GoogleAds\V0\Common\CustomParameter::class);
+ $this->url_custom_parameters = $arr;
+
+ return $this;
+ }
+
+ /**
+ * Keyword.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.KeywordInfo keyword = 27;
+ * @return \Google\Ads\GoogleAds\V0\Common\KeywordInfo
+ */
+ public function getKeyword()
+ {
+ return $this->readOneof(27);
+ }
+
+ /**
+ * Keyword.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.KeywordInfo keyword = 27;
+ * @param \Google\Ads\GoogleAds\V0\Common\KeywordInfo $var
+ * @return $this
+ */
+ public function setKeyword($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Common\KeywordInfo::class);
+ $this->writeOneof(27, $var);
+
+ return $this;
+ }
+
+ /**
+ * Listing group.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.ListingGroupInfo listing_group = 32;
+ * @return \Google\Ads\GoogleAds\V0\Common\ListingGroupInfo
+ */
+ public function getListingGroup()
+ {
+ return $this->readOneof(32);
+ }
+
+ /**
+ * Listing group.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.ListingGroupInfo listing_group = 32;
+ * @param \Google\Ads\GoogleAds\V0\Common\ListingGroupInfo $var
+ * @return $this
+ */
+ public function setListingGroup($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Common\ListingGroupInfo::class);
+ $this->writeOneof(32, $var);
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getCriterion()
+ {
+ return $this->whichOneof("criterion");
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Resources/AdGroupCriterion_PositionEstimates.php b/src/Google/Ads/GoogleAds/V0/Resources/AdGroupCriterion_PositionEstimates.php
new file mode 100644
index 000000000..5c2fdca17
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Resources/AdGroupCriterion_PositionEstimates.php
@@ -0,0 +1,130 @@
+google.ads.googleads.v0.resources.AdGroupCriterion.PositionEstimates
+ */
+class AdGroupCriterion_PositionEstimates extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The estimate of the CPC bid required for ad to be shown on first
+ * page of search results.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value first_page_cpc_micros = 1;
+ */
+ private $first_page_cpc_micros = null;
+ /**
+ * The estimate of the CPC bid required for ad to be displayed in first
+ * position, at the top of the first page of search results.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value first_position_cpc_micros = 2;
+ */
+ private $first_position_cpc_micros = null;
+ /**
+ * The estimate of the CPC bid required for ad to be displayed at the top
+ * of the first page of search results.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value top_of_page_cpc_micros = 3;
+ */
+ private $top_of_page_cpc_micros = null;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Resources\AdGroupCriterion::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * The estimate of the CPC bid required for ad to be shown on first
+ * page of search results.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value first_page_cpc_micros = 1;
+ * @return \Google\Protobuf\Int64Value
+ */
+ public function getFirstPageCpcMicros()
+ {
+ return $this->first_page_cpc_micros;
+ }
+
+ /**
+ * The estimate of the CPC bid required for ad to be shown on first
+ * page of search results.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value first_page_cpc_micros = 1;
+ * @param \Google\Protobuf\Int64Value $var
+ * @return $this
+ */
+ public function setFirstPageCpcMicros($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Int64Value::class);
+ $this->first_page_cpc_micros = $var;
+
+ return $this;
+ }
+
+ /**
+ * The estimate of the CPC bid required for ad to be displayed in first
+ * position, at the top of the first page of search results.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value first_position_cpc_micros = 2;
+ * @return \Google\Protobuf\Int64Value
+ */
+ public function getFirstPositionCpcMicros()
+ {
+ return $this->first_position_cpc_micros;
+ }
+
+ /**
+ * The estimate of the CPC bid required for ad to be displayed in first
+ * position, at the top of the first page of search results.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value first_position_cpc_micros = 2;
+ * @param \Google\Protobuf\Int64Value $var
+ * @return $this
+ */
+ public function setFirstPositionCpcMicros($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Int64Value::class);
+ $this->first_position_cpc_micros = $var;
+
+ return $this;
+ }
+
+ /**
+ * The estimate of the CPC bid required for ad to be displayed at the top
+ * of the first page of search results.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value top_of_page_cpc_micros = 3;
+ * @return \Google\Protobuf\Int64Value
+ */
+ public function getTopOfPageCpcMicros()
+ {
+ return $this->top_of_page_cpc_micros;
+ }
+
+ /**
+ * The estimate of the CPC bid required for ad to be displayed at the top
+ * of the first page of search results.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value top_of_page_cpc_micros = 3;
+ * @param \Google\Protobuf\Int64Value $var
+ * @return $this
+ */
+ public function setTopOfPageCpcMicros($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Int64Value::class);
+ $this->top_of_page_cpc_micros = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Resources/AdGroupCriterion_QualityInfo.php b/src/Google/Ads/GoogleAds/V0/Resources/AdGroupCriterion_QualityInfo.php
new file mode 100644
index 000000000..9f7818495
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Resources/AdGroupCriterion_QualityInfo.php
@@ -0,0 +1,159 @@
+google.ads.googleads.v0.resources.AdGroupCriterion.QualityInfo
+ */
+class AdGroupCriterion_QualityInfo extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The quality score.
+ * This field may not be populated if Google does not have enough
+ * information to determine a value.
+ *
+ * Generated from protobuf field .google.protobuf.Int32Value quality_score = 1;
+ */
+ private $quality_score = null;
+ /**
+ * The performance of the ad compared to other advertisers.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.QualityScoreBucketEnum.QualityScoreBucket creative_quality_score = 2;
+ */
+ private $creative_quality_score = 0;
+ /**
+ * The quality score of the landing page.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.QualityScoreBucketEnum.QualityScoreBucket post_click_quality_score = 3;
+ */
+ private $post_click_quality_score = 0;
+ /**
+ * The click-through rate compared to that of other advertisers.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.QualityScoreBucketEnum.QualityScoreBucket search_predicted_ctr = 4;
+ */
+ private $search_predicted_ctr = 0;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Resources\AdGroupCriterion::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * The quality score.
+ * This field may not be populated if Google does not have enough
+ * information to determine a value.
+ *
+ * Generated from protobuf field .google.protobuf.Int32Value quality_score = 1;
+ * @return \Google\Protobuf\Int32Value
+ */
+ public function getQualityScore()
+ {
+ return $this->quality_score;
+ }
+
+ /**
+ * The quality score.
+ * This field may not be populated if Google does not have enough
+ * information to determine a value.
+ *
+ * Generated from protobuf field .google.protobuf.Int32Value quality_score = 1;
+ * @param \Google\Protobuf\Int32Value $var
+ * @return $this
+ */
+ public function setQualityScore($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Int32Value::class);
+ $this->quality_score = $var;
+
+ return $this;
+ }
+
+ /**
+ * The performance of the ad compared to other advertisers.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.QualityScoreBucketEnum.QualityScoreBucket creative_quality_score = 2;
+ * @return int
+ */
+ public function getCreativeQualityScore()
+ {
+ return $this->creative_quality_score;
+ }
+
+ /**
+ * The performance of the ad compared to other advertisers.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.QualityScoreBucketEnum.QualityScoreBucket creative_quality_score = 2;
+ * @param int $var
+ * @return $this
+ */
+ public function setCreativeQualityScore($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Enums\QualityScoreBucketEnum_QualityScoreBucket::class);
+ $this->creative_quality_score = $var;
+
+ return $this;
+ }
+
+ /**
+ * The quality score of the landing page.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.QualityScoreBucketEnum.QualityScoreBucket post_click_quality_score = 3;
+ * @return int
+ */
+ public function getPostClickQualityScore()
+ {
+ return $this->post_click_quality_score;
+ }
+
+ /**
+ * The quality score of the landing page.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.QualityScoreBucketEnum.QualityScoreBucket post_click_quality_score = 3;
+ * @param int $var
+ * @return $this
+ */
+ public function setPostClickQualityScore($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Enums\QualityScoreBucketEnum_QualityScoreBucket::class);
+ $this->post_click_quality_score = $var;
+
+ return $this;
+ }
+
+ /**
+ * The click-through rate compared to that of other advertisers.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.QualityScoreBucketEnum.QualityScoreBucket search_predicted_ctr = 4;
+ * @return int
+ */
+ public function getSearchPredictedCtr()
+ {
+ return $this->search_predicted_ctr;
+ }
+
+ /**
+ * The click-through rate compared to that of other advertisers.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.QualityScoreBucketEnum.QualityScoreBucket search_predicted_ctr = 4;
+ * @param int $var
+ * @return $this
+ */
+ public function setSearchPredictedCtr($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Enums\QualityScoreBucketEnum_QualityScoreBucket::class);
+ $this->search_predicted_ctr = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Resources/BiddingStrategy.php b/src/Google/Ads/GoogleAds/V0/Resources/BiddingStrategy.php
new file mode 100644
index 000000000..d5b29bce0
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Resources/BiddingStrategy.php
@@ -0,0 +1,353 @@
+google.ads.googleads.v0.resources.BiddingStrategy
+ */
+class BiddingStrategy extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The resource name of the bidding strategy.
+ * Bidding strategy resource names have the form:
+ * `customers/{customer_id}/biddingStrategies/{bidding_strategy_id}`
+ *
+ * Generated from protobuf field string resource_name = 1;
+ */
+ private $resource_name = '';
+ /**
+ * The ID of the bidding strategy.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value id = 3;
+ */
+ private $id = null;
+ /**
+ * The name of the bidding strategy.
+ * All bidding strategies within an account must be named distinctly.
+ * The length of this string should be between 1 and 255, inclusive,
+ * in UTF-8 bytes, (trimmed).
+ *
+ * Generated from protobuf field .google.protobuf.StringValue name = 4;
+ */
+ private $name = null;
+ /**
+ * The type of the bidding strategy.
+ * Create a bidding strategy by setting the bidding scheme.
+ * This field is read-only.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.BiddingStrategyTypeEnum.BiddingStrategyType type = 5;
+ */
+ private $type = 0;
+ protected $scheme;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Resources\BiddingStrategy::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * The resource name of the bidding strategy.
+ * Bidding strategy resource names have the form:
+ * `customers/{customer_id}/biddingStrategies/{bidding_strategy_id}`
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @return string
+ */
+ public function getResourceName()
+ {
+ return $this->resource_name;
+ }
+
+ /**
+ * The resource name of the bidding strategy.
+ * Bidding strategy resource names have the form:
+ * `customers/{customer_id}/biddingStrategies/{bidding_strategy_id}`
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @param string $var
+ * @return $this
+ */
+ public function setResourceName($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->resource_name = $var;
+
+ return $this;
+ }
+
+ /**
+ * The ID of the bidding strategy.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value id = 3;
+ * @return \Google\Protobuf\Int64Value
+ */
+ public function getId()
+ {
+ return $this->id;
+ }
+
+ /**
+ * The ID of the bidding strategy.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value id = 3;
+ * @param \Google\Protobuf\Int64Value $var
+ * @return $this
+ */
+ public function setId($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Int64Value::class);
+ $this->id = $var;
+
+ return $this;
+ }
+
+ /**
+ * The name of the bidding strategy.
+ * All bidding strategies within an account must be named distinctly.
+ * The length of this string should be between 1 and 255, inclusive,
+ * in UTF-8 bytes, (trimmed).
+ *
+ * Generated from protobuf field .google.protobuf.StringValue name = 4;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getName()
+ {
+ return $this->name;
+ }
+
+ /**
+ * The name of the bidding strategy.
+ * All bidding strategies within an account must be named distinctly.
+ * The length of this string should be between 1 and 255, inclusive,
+ * in UTF-8 bytes, (trimmed).
+ *
+ * Generated from protobuf field .google.protobuf.StringValue name = 4;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setName($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->name = $var;
+
+ return $this;
+ }
+
+ /**
+ * The type of the bidding strategy.
+ * Create a bidding strategy by setting the bidding scheme.
+ * This field is read-only.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.BiddingStrategyTypeEnum.BiddingStrategyType type = 5;
+ * @return int
+ */
+ public function getType()
+ {
+ return $this->type;
+ }
+
+ /**
+ * The type of the bidding strategy.
+ * Create a bidding strategy by setting the bidding scheme.
+ * This field is read-only.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.BiddingStrategyTypeEnum.BiddingStrategyType type = 5;
+ * @param int $var
+ * @return $this
+ */
+ public function setType($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Enums\BiddingStrategyTypeEnum_BiddingStrategyType::class);
+ $this->type = $var;
+
+ return $this;
+ }
+
+ /**
+ * A bidding strategy that raises bids for clicks that seem more likely to
+ * lead to a conversion and lowers them for clicks where they seem less
+ * likely.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.EnhancedCpc enhanced_cpc = 7;
+ * @return \Google\Ads\GoogleAds\V0\Common\EnhancedCpc
+ */
+ public function getEnhancedCpc()
+ {
+ return $this->readOneof(7);
+ }
+
+ /**
+ * A bidding strategy that raises bids for clicks that seem more likely to
+ * lead to a conversion and lowers them for clicks where they seem less
+ * likely.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.EnhancedCpc enhanced_cpc = 7;
+ * @param \Google\Ads\GoogleAds\V0\Common\EnhancedCpc $var
+ * @return $this
+ */
+ public function setEnhancedCpc($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Common\EnhancedCpc::class);
+ $this->writeOneof(7, $var);
+
+ return $this;
+ }
+
+ /**
+ * A bidding strategy that sets max CPC bids to target impressions on
+ * page one or page one promoted slots on google.com.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.PageOnePromoted page_one_promoted = 8;
+ * @return \Google\Ads\GoogleAds\V0\Common\PageOnePromoted
+ */
+ public function getPageOnePromoted()
+ {
+ return $this->readOneof(8);
+ }
+
+ /**
+ * A bidding strategy that sets max CPC bids to target impressions on
+ * page one or page one promoted slots on google.com.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.PageOnePromoted page_one_promoted = 8;
+ * @param \Google\Ads\GoogleAds\V0\Common\PageOnePromoted $var
+ * @return $this
+ */
+ public function setPageOnePromoted($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Common\PageOnePromoted::class);
+ $this->writeOneof(8, $var);
+
+ return $this;
+ }
+
+ /**
+ * A bidding strategy that sets bids to help get as many conversions as
+ * possible at the target cost-per-acquisition (CPA) you set.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.TargetCpa target_cpa = 9;
+ * @return \Google\Ads\GoogleAds\V0\Common\TargetCpa
+ */
+ public function getTargetCpa()
+ {
+ return $this->readOneof(9);
+ }
+
+ /**
+ * A bidding strategy that sets bids to help get as many conversions as
+ * possible at the target cost-per-acquisition (CPA) you set.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.TargetCpa target_cpa = 9;
+ * @param \Google\Ads\GoogleAds\V0\Common\TargetCpa $var
+ * @return $this
+ */
+ public function setTargetCpa($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Common\TargetCpa::class);
+ $this->writeOneof(9, $var);
+
+ return $this;
+ }
+
+ /**
+ * A bidding strategy that sets bids based on the target fraction of
+ * auctions where the advertiser should outrank a specific competitor.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.TargetOutrankShare target_outrank_share = 10;
+ * @return \Google\Ads\GoogleAds\V0\Common\TargetOutrankShare
+ */
+ public function getTargetOutrankShare()
+ {
+ return $this->readOneof(10);
+ }
+
+ /**
+ * A bidding strategy that sets bids based on the target fraction of
+ * auctions where the advertiser should outrank a specific competitor.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.TargetOutrankShare target_outrank_share = 10;
+ * @param \Google\Ads\GoogleAds\V0\Common\TargetOutrankShare $var
+ * @return $this
+ */
+ public function setTargetOutrankShare($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Common\TargetOutrankShare::class);
+ $this->writeOneof(10, $var);
+
+ return $this;
+ }
+
+ /**
+ * A bidding strategy that helps you maximize revenue while averaging a
+ * specific target Return On Ad Spend (ROAS).
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.TargetRoas target_roas = 11;
+ * @return \Google\Ads\GoogleAds\V0\Common\TargetRoas
+ */
+ public function getTargetRoas()
+ {
+ return $this->readOneof(11);
+ }
+
+ /**
+ * A bidding strategy that helps you maximize revenue while averaging a
+ * specific target Return On Ad Spend (ROAS).
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.TargetRoas target_roas = 11;
+ * @param \Google\Ads\GoogleAds\V0\Common\TargetRoas $var
+ * @return $this
+ */
+ public function setTargetRoas($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Common\TargetRoas::class);
+ $this->writeOneof(11, $var);
+
+ return $this;
+ }
+
+ /**
+ * A bid strategy that sets your bids to help get as many clicks as
+ * possible within your budget.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.TargetSpend target_spend = 12;
+ * @return \Google\Ads\GoogleAds\V0\Common\TargetSpend
+ */
+ public function getTargetSpend()
+ {
+ return $this->readOneof(12);
+ }
+
+ /**
+ * A bid strategy that sets your bids to help get as many clicks as
+ * possible within your budget.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.TargetSpend target_spend = 12;
+ * @param \Google\Ads\GoogleAds\V0\Common\TargetSpend $var
+ * @return $this
+ */
+ public function setTargetSpend($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Common\TargetSpend::class);
+ $this->writeOneof(12, $var);
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getScheme()
+ {
+ return $this->whichOneof("scheme");
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Resources/Campaign.php b/src/Google/Ads/GoogleAds/V0/Resources/Campaign.php
new file mode 100644
index 000000000..b160b9491
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Resources/Campaign.php
@@ -0,0 +1,869 @@
+google.ads.googleads.v0.resources.Campaign
+ */
+class Campaign extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The resource name of the campaign.
+ * Campaign resource names have the form:
+ * `customers/{customer_id}/campaigns/{campaign_id}`
+ *
+ * Generated from protobuf field string resource_name = 1;
+ */
+ private $resource_name = '';
+ /**
+ * The ID of the campaign.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value id = 3;
+ */
+ private $id = null;
+ /**
+ * The name of the campaign.
+ * This field is required and should not be empty when creating new
+ * campaigns.
+ * It must not contain any null (code point 0x0), NL line feed
+ * (code point 0xA) or carriage return (code point 0xD) characters.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue name = 4;
+ */
+ private $name = null;
+ /**
+ * The status of the campaign.
+ * When a new campaign is added, the status defaults to ENABLED.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.CampaignStatusEnum.CampaignStatus status = 5;
+ */
+ private $status = 0;
+ /**
+ * The ad serving status of the campaign.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.CampaignServingStatusEnum.CampaignServingStatus serving_status = 21;
+ */
+ private $serving_status = 0;
+ /**
+ * The ad serving optimization status of the campaign.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.AdServingOptimizationStatusEnum.AdServingOptimizationStatus ad_serving_optimization_status = 8;
+ */
+ private $ad_serving_optimization_status = 0;
+ /**
+ * The primary serving target for ads within the campaign.
+ * The targeting options can be refined in `network_settings`.
+ * Can be set only when creating campaigns.
+ * After the campaign is created, the field can not be changed.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.AdvertisingChannelTypeEnum.AdvertisingChannelType advertising_channel_type = 9;
+ */
+ private $advertising_channel_type = 0;
+ /**
+ * Optional refinement to `advertising_channel_type`.
+ * Must be a valid sub-type of the parent channel type.
+ * Can be set only when creating campaigns.
+ * After campaign is created, the field can not be changed.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.AdvertisingChannelSubTypeEnum.AdvertisingChannelSubType advertising_channel_sub_type = 10;
+ */
+ private $advertising_channel_sub_type = 0;
+ /**
+ * The URL template for constructing a tracking URL.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue tracking_url_template = 11;
+ */
+ private $tracking_url_template = null;
+ /**
+ * The list of mappings used to substitute custom parameter tags in a
+ * `tracking_url_template`, `final_urls`, or `mobile_final_urls`.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.common.CustomParameter url_custom_parameters = 12;
+ */
+ private $url_custom_parameters;
+ /**
+ * The network settings for the campaign.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.Campaign.NetworkSettings network_settings = 14;
+ */
+ private $network_settings = null;
+ /**
+ * The hotel setting for the campaign.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.Campaign.HotelSettingInfo hotel_setting = 32;
+ */
+ private $hotel_setting = null;
+ /**
+ * The setting for controlling Dynamic Search Ads (DSA).
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.Campaign.DynamicSearchAdsSetting dynamic_search_ads_setting = 33;
+ */
+ private $dynamic_search_ads_setting = null;
+ /**
+ * The budget of the campaign.
+ * This field must not be used in WHERE clauses.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue campaign_budget = 6;
+ */
+ private $campaign_budget = null;
+ /**
+ * The type of bidding strategy.
+ * A bidding strategy can be created by setting either the bidding scheme to
+ * create a standard bidding strategy or the `bidding_strategy` field to
+ * create a portfolio bidding strategy.
+ * This field is read-only.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.BiddingStrategyTypeEnum.BiddingStrategyType bidding_strategy_type = 22;
+ */
+ private $bidding_strategy_type = 0;
+ /**
+ * The date when campaign started.
+ * This field must not be used in WHERE clauses.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue start_date = 19;
+ */
+ private $start_date = null;
+ /**
+ * The date when campaign ended.
+ * This field must not be used in WHERE clauses.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue end_date = 20;
+ */
+ private $end_date = null;
+ protected $campaign_bidding_strategy;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Resources\Campaign::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * The resource name of the campaign.
+ * Campaign resource names have the form:
+ * `customers/{customer_id}/campaigns/{campaign_id}`
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @return string
+ */
+ public function getResourceName()
+ {
+ return $this->resource_name;
+ }
+
+ /**
+ * The resource name of the campaign.
+ * Campaign resource names have the form:
+ * `customers/{customer_id}/campaigns/{campaign_id}`
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @param string $var
+ * @return $this
+ */
+ public function setResourceName($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->resource_name = $var;
+
+ return $this;
+ }
+
+ /**
+ * The ID of the campaign.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value id = 3;
+ * @return \Google\Protobuf\Int64Value
+ */
+ public function getId()
+ {
+ return $this->id;
+ }
+
+ /**
+ * The ID of the campaign.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value id = 3;
+ * @param \Google\Protobuf\Int64Value $var
+ * @return $this
+ */
+ public function setId($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Int64Value::class);
+ $this->id = $var;
+
+ return $this;
+ }
+
+ /**
+ * The name of the campaign.
+ * This field is required and should not be empty when creating new
+ * campaigns.
+ * It must not contain any null (code point 0x0), NL line feed
+ * (code point 0xA) or carriage return (code point 0xD) characters.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue name = 4;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getName()
+ {
+ return $this->name;
+ }
+
+ /**
+ * The name of the campaign.
+ * This field is required and should not be empty when creating new
+ * campaigns.
+ * It must not contain any null (code point 0x0), NL line feed
+ * (code point 0xA) or carriage return (code point 0xD) characters.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue name = 4;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setName($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->name = $var;
+
+ return $this;
+ }
+
+ /**
+ * The status of the campaign.
+ * When a new campaign is added, the status defaults to ENABLED.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.CampaignStatusEnum.CampaignStatus status = 5;
+ * @return int
+ */
+ public function getStatus()
+ {
+ return $this->status;
+ }
+
+ /**
+ * The status of the campaign.
+ * When a new campaign is added, the status defaults to ENABLED.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.CampaignStatusEnum.CampaignStatus status = 5;
+ * @param int $var
+ * @return $this
+ */
+ public function setStatus($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Enums\CampaignStatusEnum_CampaignStatus::class);
+ $this->status = $var;
+
+ return $this;
+ }
+
+ /**
+ * The ad serving status of the campaign.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.CampaignServingStatusEnum.CampaignServingStatus serving_status = 21;
+ * @return int
+ */
+ public function getServingStatus()
+ {
+ return $this->serving_status;
+ }
+
+ /**
+ * The ad serving status of the campaign.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.CampaignServingStatusEnum.CampaignServingStatus serving_status = 21;
+ * @param int $var
+ * @return $this
+ */
+ public function setServingStatus($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Enums\CampaignServingStatusEnum_CampaignServingStatus::class);
+ $this->serving_status = $var;
+
+ return $this;
+ }
+
+ /**
+ * The ad serving optimization status of the campaign.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.AdServingOptimizationStatusEnum.AdServingOptimizationStatus ad_serving_optimization_status = 8;
+ * @return int
+ */
+ public function getAdServingOptimizationStatus()
+ {
+ return $this->ad_serving_optimization_status;
+ }
+
+ /**
+ * The ad serving optimization status of the campaign.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.AdServingOptimizationStatusEnum.AdServingOptimizationStatus ad_serving_optimization_status = 8;
+ * @param int $var
+ * @return $this
+ */
+ public function setAdServingOptimizationStatus($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Enums\AdServingOptimizationStatusEnum_AdServingOptimizationStatus::class);
+ $this->ad_serving_optimization_status = $var;
+
+ return $this;
+ }
+
+ /**
+ * The primary serving target for ads within the campaign.
+ * The targeting options can be refined in `network_settings`.
+ * Can be set only when creating campaigns.
+ * After the campaign is created, the field can not be changed.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.AdvertisingChannelTypeEnum.AdvertisingChannelType advertising_channel_type = 9;
+ * @return int
+ */
+ public function getAdvertisingChannelType()
+ {
+ return $this->advertising_channel_type;
+ }
+
+ /**
+ * The primary serving target for ads within the campaign.
+ * The targeting options can be refined in `network_settings`.
+ * Can be set only when creating campaigns.
+ * After the campaign is created, the field can not be changed.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.AdvertisingChannelTypeEnum.AdvertisingChannelType advertising_channel_type = 9;
+ * @param int $var
+ * @return $this
+ */
+ public function setAdvertisingChannelType($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Enums\AdvertisingChannelTypeEnum_AdvertisingChannelType::class);
+ $this->advertising_channel_type = $var;
+
+ return $this;
+ }
+
+ /**
+ * Optional refinement to `advertising_channel_type`.
+ * Must be a valid sub-type of the parent channel type.
+ * Can be set only when creating campaigns.
+ * After campaign is created, the field can not be changed.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.AdvertisingChannelSubTypeEnum.AdvertisingChannelSubType advertising_channel_sub_type = 10;
+ * @return int
+ */
+ public function getAdvertisingChannelSubType()
+ {
+ return $this->advertising_channel_sub_type;
+ }
+
+ /**
+ * Optional refinement to `advertising_channel_type`.
+ * Must be a valid sub-type of the parent channel type.
+ * Can be set only when creating campaigns.
+ * After campaign is created, the field can not be changed.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.AdvertisingChannelSubTypeEnum.AdvertisingChannelSubType advertising_channel_sub_type = 10;
+ * @param int $var
+ * @return $this
+ */
+ public function setAdvertisingChannelSubType($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Enums\AdvertisingChannelSubTypeEnum_AdvertisingChannelSubType::class);
+ $this->advertising_channel_sub_type = $var;
+
+ return $this;
+ }
+
+ /**
+ * The URL template for constructing a tracking URL.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue tracking_url_template = 11;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getTrackingUrlTemplate()
+ {
+ return $this->tracking_url_template;
+ }
+
+ /**
+ * The URL template for constructing a tracking URL.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue tracking_url_template = 11;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setTrackingUrlTemplate($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->tracking_url_template = $var;
+
+ return $this;
+ }
+
+ /**
+ * The list of mappings used to substitute custom parameter tags in a
+ * `tracking_url_template`, `final_urls`, or `mobile_final_urls`.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.common.CustomParameter url_custom_parameters = 12;
+ * @return \Google\Protobuf\Internal\RepeatedField
+ */
+ public function getUrlCustomParameters()
+ {
+ return $this->url_custom_parameters;
+ }
+
+ /**
+ * The list of mappings used to substitute custom parameter tags in a
+ * `tracking_url_template`, `final_urls`, or `mobile_final_urls`.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.common.CustomParameter url_custom_parameters = 12;
+ * @param \Google\Ads\GoogleAds\V0\Common\CustomParameter[]|\Google\Protobuf\Internal\RepeatedField $var
+ * @return $this
+ */
+ public function setUrlCustomParameters($var)
+ {
+ $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Ads\GoogleAds\V0\Common\CustomParameter::class);
+ $this->url_custom_parameters = $arr;
+
+ return $this;
+ }
+
+ /**
+ * The network settings for the campaign.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.Campaign.NetworkSettings network_settings = 14;
+ * @return \Google\Ads\GoogleAds\V0\Resources\Campaign_NetworkSettings
+ */
+ public function getNetworkSettings()
+ {
+ return $this->network_settings;
+ }
+
+ /**
+ * The network settings for the campaign.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.Campaign.NetworkSettings network_settings = 14;
+ * @param \Google\Ads\GoogleAds\V0\Resources\Campaign_NetworkSettings $var
+ * @return $this
+ */
+ public function setNetworkSettings($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Resources\Campaign_NetworkSettings::class);
+ $this->network_settings = $var;
+
+ return $this;
+ }
+
+ /**
+ * The hotel setting for the campaign.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.Campaign.HotelSettingInfo hotel_setting = 32;
+ * @return \Google\Ads\GoogleAds\V0\Resources\Campaign_HotelSettingInfo
+ */
+ public function getHotelSetting()
+ {
+ return $this->hotel_setting;
+ }
+
+ /**
+ * The hotel setting for the campaign.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.Campaign.HotelSettingInfo hotel_setting = 32;
+ * @param \Google\Ads\GoogleAds\V0\Resources\Campaign_HotelSettingInfo $var
+ * @return $this
+ */
+ public function setHotelSetting($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Resources\Campaign_HotelSettingInfo::class);
+ $this->hotel_setting = $var;
+
+ return $this;
+ }
+
+ /**
+ * The setting for controlling Dynamic Search Ads (DSA).
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.Campaign.DynamicSearchAdsSetting dynamic_search_ads_setting = 33;
+ * @return \Google\Ads\GoogleAds\V0\Resources\Campaign_DynamicSearchAdsSetting
+ */
+ public function getDynamicSearchAdsSetting()
+ {
+ return $this->dynamic_search_ads_setting;
+ }
+
+ /**
+ * The setting for controlling Dynamic Search Ads (DSA).
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.Campaign.DynamicSearchAdsSetting dynamic_search_ads_setting = 33;
+ * @param \Google\Ads\GoogleAds\V0\Resources\Campaign_DynamicSearchAdsSetting $var
+ * @return $this
+ */
+ public function setDynamicSearchAdsSetting($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Resources\Campaign_DynamicSearchAdsSetting::class);
+ $this->dynamic_search_ads_setting = $var;
+
+ return $this;
+ }
+
+ /**
+ * The budget of the campaign.
+ * This field must not be used in WHERE clauses.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue campaign_budget = 6;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getCampaignBudget()
+ {
+ return $this->campaign_budget;
+ }
+
+ /**
+ * The budget of the campaign.
+ * This field must not be used in WHERE clauses.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue campaign_budget = 6;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setCampaignBudget($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->campaign_budget = $var;
+
+ return $this;
+ }
+
+ /**
+ * The type of bidding strategy.
+ * A bidding strategy can be created by setting either the bidding scheme to
+ * create a standard bidding strategy or the `bidding_strategy` field to
+ * create a portfolio bidding strategy.
+ * This field is read-only.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.BiddingStrategyTypeEnum.BiddingStrategyType bidding_strategy_type = 22;
+ * @return int
+ */
+ public function getBiddingStrategyType()
+ {
+ return $this->bidding_strategy_type;
+ }
+
+ /**
+ * The type of bidding strategy.
+ * A bidding strategy can be created by setting either the bidding scheme to
+ * create a standard bidding strategy or the `bidding_strategy` field to
+ * create a portfolio bidding strategy.
+ * This field is read-only.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.BiddingStrategyTypeEnum.BiddingStrategyType bidding_strategy_type = 22;
+ * @param int $var
+ * @return $this
+ */
+ public function setBiddingStrategyType($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Enums\BiddingStrategyTypeEnum_BiddingStrategyType::class);
+ $this->bidding_strategy_type = $var;
+
+ return $this;
+ }
+
+ /**
+ * The date when campaign started.
+ * This field must not be used in WHERE clauses.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue start_date = 19;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getStartDate()
+ {
+ return $this->start_date;
+ }
+
+ /**
+ * The date when campaign started.
+ * This field must not be used in WHERE clauses.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue start_date = 19;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setStartDate($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->start_date = $var;
+
+ return $this;
+ }
+
+ /**
+ * The date when campaign ended.
+ * This field must not be used in WHERE clauses.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue end_date = 20;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getEndDate()
+ {
+ return $this->end_date;
+ }
+
+ /**
+ * The date when campaign ended.
+ * This field must not be used in WHERE clauses.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue end_date = 20;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setEndDate($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->end_date = $var;
+
+ return $this;
+ }
+
+ /**
+ * Portfolio bidding strategy used by campaign.
+ * This field must not be used in WHERE clauses.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue bidding_strategy = 23;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getBiddingStrategy()
+ {
+ return $this->readOneof(23);
+ }
+
+ /**
+ * Portfolio bidding strategy used by campaign.
+ * This field must not be used in WHERE clauses.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue bidding_strategy = 23;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setBiddingStrategy($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->writeOneof(23, $var);
+
+ return $this;
+ }
+
+ /**
+ * Standard Manual CPC bidding strategy.
+ * Manual click-based bidding where user pays per click.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.ManualCpc manual_cpc = 24;
+ * @return \Google\Ads\GoogleAds\V0\Common\ManualCpc
+ */
+ public function getManualCpc()
+ {
+ return $this->readOneof(24);
+ }
+
+ /**
+ * Standard Manual CPC bidding strategy.
+ * Manual click-based bidding where user pays per click.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.ManualCpc manual_cpc = 24;
+ * @param \Google\Ads\GoogleAds\V0\Common\ManualCpc $var
+ * @return $this
+ */
+ public function setManualCpc($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Common\ManualCpc::class);
+ $this->writeOneof(24, $var);
+
+ return $this;
+ }
+
+ /**
+ * Standard Manual CPM bidding strategy.
+ * Manual impression-based bidding where user pays per thousand
+ * impressions.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.ManualCpm manual_cpm = 25;
+ * @return \Google\Ads\GoogleAds\V0\Common\ManualCpm
+ */
+ public function getManualCpm()
+ {
+ return $this->readOneof(25);
+ }
+
+ /**
+ * Standard Manual CPM bidding strategy.
+ * Manual impression-based bidding where user pays per thousand
+ * impressions.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.ManualCpm manual_cpm = 25;
+ * @param \Google\Ads\GoogleAds\V0\Common\ManualCpm $var
+ * @return $this
+ */
+ public function setManualCpm($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Common\ManualCpm::class);
+ $this->writeOneof(25, $var);
+
+ return $this;
+ }
+
+ /**
+ * Standard Maximize Conversions bidding strategy that automatically
+ * maximizes number of conversions given a daily budget.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.MaximizeConversions maximize_conversions = 30;
+ * @return \Google\Ads\GoogleAds\V0\Common\MaximizeConversions
+ */
+ public function getMaximizeConversions()
+ {
+ return $this->readOneof(30);
+ }
+
+ /**
+ * Standard Maximize Conversions bidding strategy that automatically
+ * maximizes number of conversions given a daily budget.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.MaximizeConversions maximize_conversions = 30;
+ * @param \Google\Ads\GoogleAds\V0\Common\MaximizeConversions $var
+ * @return $this
+ */
+ public function setMaximizeConversions($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Common\MaximizeConversions::class);
+ $this->writeOneof(30, $var);
+
+ return $this;
+ }
+
+ /**
+ * Standard Maximize Conversion Value bidding strategy that automatically
+ * sets bids to maximize revenue while spending your budget.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.MaximizeConversionValue maximize_conversion_value = 31;
+ * @return \Google\Ads\GoogleAds\V0\Common\MaximizeConversionValue
+ */
+ public function getMaximizeConversionValue()
+ {
+ return $this->readOneof(31);
+ }
+
+ /**
+ * Standard Maximize Conversion Value bidding strategy that automatically
+ * sets bids to maximize revenue while spending your budget.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.MaximizeConversionValue maximize_conversion_value = 31;
+ * @param \Google\Ads\GoogleAds\V0\Common\MaximizeConversionValue $var
+ * @return $this
+ */
+ public function setMaximizeConversionValue($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Common\MaximizeConversionValue::class);
+ $this->writeOneof(31, $var);
+
+ return $this;
+ }
+
+ /**
+ * Standard Target CPA bidding strategy that automatically sets bids to
+ * help get as many conversions as possible at the target
+ * cost-per-acquisition (CPA) you set.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.TargetCpa target_cpa = 26;
+ * @return \Google\Ads\GoogleAds\V0\Common\TargetCpa
+ */
+ public function getTargetCpa()
+ {
+ return $this->readOneof(26);
+ }
+
+ /**
+ * Standard Target CPA bidding strategy that automatically sets bids to
+ * help get as many conversions as possible at the target
+ * cost-per-acquisition (CPA) you set.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.TargetCpa target_cpa = 26;
+ * @param \Google\Ads\GoogleAds\V0\Common\TargetCpa $var
+ * @return $this
+ */
+ public function setTargetCpa($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Common\TargetCpa::class);
+ $this->writeOneof(26, $var);
+
+ return $this;
+ }
+
+ /**
+ * Standard Target ROAS bidding strategy that automatically maximizes
+ * revenue while averaging a specific target return on ad spend (ROAS).
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.TargetRoas target_roas = 29;
+ * @return \Google\Ads\GoogleAds\V0\Common\TargetRoas
+ */
+ public function getTargetRoas()
+ {
+ return $this->readOneof(29);
+ }
+
+ /**
+ * Standard Target ROAS bidding strategy that automatically maximizes
+ * revenue while averaging a specific target return on ad spend (ROAS).
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.TargetRoas target_roas = 29;
+ * @param \Google\Ads\GoogleAds\V0\Common\TargetRoas $var
+ * @return $this
+ */
+ public function setTargetRoas($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Common\TargetRoas::class);
+ $this->writeOneof(29, $var);
+
+ return $this;
+ }
+
+ /**
+ * Standard Target Spend bidding strategy that automatically sets your bids
+ * to help get as many clicks as possible within your budget.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.TargetSpend target_spend = 27;
+ * @return \Google\Ads\GoogleAds\V0\Common\TargetSpend
+ */
+ public function getTargetSpend()
+ {
+ return $this->readOneof(27);
+ }
+
+ /**
+ * Standard Target Spend bidding strategy that automatically sets your bids
+ * to help get as many clicks as possible within your budget.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.TargetSpend target_spend = 27;
+ * @param \Google\Ads\GoogleAds\V0\Common\TargetSpend $var
+ * @return $this
+ */
+ public function setTargetSpend($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Common\TargetSpend::class);
+ $this->writeOneof(27, $var);
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getCampaignBiddingStrategy()
+ {
+ return $this->whichOneof("campaign_bidding_strategy");
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Resources/CampaignBudget.php b/src/Google/Ads/GoogleAds/V0/Resources/CampaignBudget.php
new file mode 100644
index 000000000..5b94088ba
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Resources/CampaignBudget.php
@@ -0,0 +1,365 @@
+google.ads.googleads.v0.resources.CampaignBudget
+ */
+class CampaignBudget extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The resource name of the campaign budget.
+ * Campaign budget resource names have the form:
+ * `customers/{customer_id}/campaignBudgets/{budget_id}`
+ *
+ * Generated from protobuf field string resource_name = 1;
+ */
+ private $resource_name = '';
+ /**
+ * The ID of the campaign budget.
+ * A campaign budget is created using the CampaignBudgetService create
+ * operation and is assigned a budget ID. A budget ID can be shared across
+ * different campaigns; the system will then allocate the campaign budget
+ * among different campaigns to get optimum results.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value id = 3;
+ */
+ private $id = null;
+ /**
+ * The name of the campaign budget.
+ * When creating a campaign budget through CampaignBudgetService, every
+ * explicitly shared campaign budget must have a non-null, non-empty name.
+ * Campaign budgets that are not explicitly shared derive their name from the
+ * attached campaign's name.
+ * The length of this string must be between 1 and 255, inclusive,
+ * in UTF-8 bytes, (trimmed).
+ *
+ * Generated from protobuf field .google.protobuf.StringValue name = 4;
+ */
+ private $name = null;
+ /**
+ * The amount of the budget, in the local currency for the account.
+ * Amount is specified in micros, where one million is equivalent to one
+ * currency unit.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value amount_micros = 5;
+ */
+ private $amount_micros = null;
+ /**
+ * The status of this campaign budget. This field is read-only.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.BudgetStatusEnum.BudgetStatus status = 6;
+ */
+ private $status = 0;
+ /**
+ * The delivery method that determines the rate at which the campaign budget
+ * is spent.
+ * Defaults to STANDARD if unspecified in a create operation.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.BudgetDeliveryMethodEnum.BudgetDeliveryMethod delivery_method = 7;
+ */
+ private $delivery_method = 0;
+ /**
+ * Whether the budget is explicitly shared. This field is set to false by
+ * default.
+ * If true, the budget was created with the purpose of sharing
+ * across one or more campaigns.
+ * If false, the budget was created with the intention of only being used
+ * with a single campaign. The budget's name and status will stay in sync
+ * with the campaign's name and status. Attempting to share the budget with a
+ * second campaign will result in an error.
+ * A non-shared budget can become an explicitly shared. The same operation
+ * must
+ * also assign the budget a name.
+ * A shared campaign budget can never become non-shared.
+ *
+ * Generated from protobuf field .google.protobuf.BoolValue explicitly_shared = 8;
+ */
+ private $explicitly_shared = null;
+ /**
+ * The number of campaigns actively using the budget.
+ * This field is read-only.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value reference_count = 9;
+ */
+ private $reference_count = null;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Resources\CampaignBudget::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * The resource name of the campaign budget.
+ * Campaign budget resource names have the form:
+ * `customers/{customer_id}/campaignBudgets/{budget_id}`
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @return string
+ */
+ public function getResourceName()
+ {
+ return $this->resource_name;
+ }
+
+ /**
+ * The resource name of the campaign budget.
+ * Campaign budget resource names have the form:
+ * `customers/{customer_id}/campaignBudgets/{budget_id}`
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @param string $var
+ * @return $this
+ */
+ public function setResourceName($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->resource_name = $var;
+
+ return $this;
+ }
+
+ /**
+ * The ID of the campaign budget.
+ * A campaign budget is created using the CampaignBudgetService create
+ * operation and is assigned a budget ID. A budget ID can be shared across
+ * different campaigns; the system will then allocate the campaign budget
+ * among different campaigns to get optimum results.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value id = 3;
+ * @return \Google\Protobuf\Int64Value
+ */
+ public function getId()
+ {
+ return $this->id;
+ }
+
+ /**
+ * The ID of the campaign budget.
+ * A campaign budget is created using the CampaignBudgetService create
+ * operation and is assigned a budget ID. A budget ID can be shared across
+ * different campaigns; the system will then allocate the campaign budget
+ * among different campaigns to get optimum results.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value id = 3;
+ * @param \Google\Protobuf\Int64Value $var
+ * @return $this
+ */
+ public function setId($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Int64Value::class);
+ $this->id = $var;
+
+ return $this;
+ }
+
+ /**
+ * The name of the campaign budget.
+ * When creating a campaign budget through CampaignBudgetService, every
+ * explicitly shared campaign budget must have a non-null, non-empty name.
+ * Campaign budgets that are not explicitly shared derive their name from the
+ * attached campaign's name.
+ * The length of this string must be between 1 and 255, inclusive,
+ * in UTF-8 bytes, (trimmed).
+ *
+ * Generated from protobuf field .google.protobuf.StringValue name = 4;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getName()
+ {
+ return $this->name;
+ }
+
+ /**
+ * The name of the campaign budget.
+ * When creating a campaign budget through CampaignBudgetService, every
+ * explicitly shared campaign budget must have a non-null, non-empty name.
+ * Campaign budgets that are not explicitly shared derive their name from the
+ * attached campaign's name.
+ * The length of this string must be between 1 and 255, inclusive,
+ * in UTF-8 bytes, (trimmed).
+ *
+ * Generated from protobuf field .google.protobuf.StringValue name = 4;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setName($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->name = $var;
+
+ return $this;
+ }
+
+ /**
+ * The amount of the budget, in the local currency for the account.
+ * Amount is specified in micros, where one million is equivalent to one
+ * currency unit.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value amount_micros = 5;
+ * @return \Google\Protobuf\Int64Value
+ */
+ public function getAmountMicros()
+ {
+ return $this->amount_micros;
+ }
+
+ /**
+ * The amount of the budget, in the local currency for the account.
+ * Amount is specified in micros, where one million is equivalent to one
+ * currency unit.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value amount_micros = 5;
+ * @param \Google\Protobuf\Int64Value $var
+ * @return $this
+ */
+ public function setAmountMicros($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Int64Value::class);
+ $this->amount_micros = $var;
+
+ return $this;
+ }
+
+ /**
+ * The status of this campaign budget. This field is read-only.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.BudgetStatusEnum.BudgetStatus status = 6;
+ * @return int
+ */
+ public function getStatus()
+ {
+ return $this->status;
+ }
+
+ /**
+ * The status of this campaign budget. This field is read-only.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.BudgetStatusEnum.BudgetStatus status = 6;
+ * @param int $var
+ * @return $this
+ */
+ public function setStatus($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Enums\BudgetStatusEnum_BudgetStatus::class);
+ $this->status = $var;
+
+ return $this;
+ }
+
+ /**
+ * The delivery method that determines the rate at which the campaign budget
+ * is spent.
+ * Defaults to STANDARD if unspecified in a create operation.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.BudgetDeliveryMethodEnum.BudgetDeliveryMethod delivery_method = 7;
+ * @return int
+ */
+ public function getDeliveryMethod()
+ {
+ return $this->delivery_method;
+ }
+
+ /**
+ * The delivery method that determines the rate at which the campaign budget
+ * is spent.
+ * Defaults to STANDARD if unspecified in a create operation.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.BudgetDeliveryMethodEnum.BudgetDeliveryMethod delivery_method = 7;
+ * @param int $var
+ * @return $this
+ */
+ public function setDeliveryMethod($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Enums\BudgetDeliveryMethodEnum_BudgetDeliveryMethod::class);
+ $this->delivery_method = $var;
+
+ return $this;
+ }
+
+ /**
+ * Whether the budget is explicitly shared. This field is set to false by
+ * default.
+ * If true, the budget was created with the purpose of sharing
+ * across one or more campaigns.
+ * If false, the budget was created with the intention of only being used
+ * with a single campaign. The budget's name and status will stay in sync
+ * with the campaign's name and status. Attempting to share the budget with a
+ * second campaign will result in an error.
+ * A non-shared budget can become an explicitly shared. The same operation
+ * must
+ * also assign the budget a name.
+ * A shared campaign budget can never become non-shared.
+ *
+ * Generated from protobuf field .google.protobuf.BoolValue explicitly_shared = 8;
+ * @return \Google\Protobuf\BoolValue
+ */
+ public function getExplicitlyShared()
+ {
+ return $this->explicitly_shared;
+ }
+
+ /**
+ * Whether the budget is explicitly shared. This field is set to false by
+ * default.
+ * If true, the budget was created with the purpose of sharing
+ * across one or more campaigns.
+ * If false, the budget was created with the intention of only being used
+ * with a single campaign. The budget's name and status will stay in sync
+ * with the campaign's name and status. Attempting to share the budget with a
+ * second campaign will result in an error.
+ * A non-shared budget can become an explicitly shared. The same operation
+ * must
+ * also assign the budget a name.
+ * A shared campaign budget can never become non-shared.
+ *
+ * Generated from protobuf field .google.protobuf.BoolValue explicitly_shared = 8;
+ * @param \Google\Protobuf\BoolValue $var
+ * @return $this
+ */
+ public function setExplicitlyShared($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\BoolValue::class);
+ $this->explicitly_shared = $var;
+
+ return $this;
+ }
+
+ /**
+ * The number of campaigns actively using the budget.
+ * This field is read-only.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value reference_count = 9;
+ * @return \Google\Protobuf\Int64Value
+ */
+ public function getReferenceCount()
+ {
+ return $this->reference_count;
+ }
+
+ /**
+ * The number of campaigns actively using the budget.
+ * This field is read-only.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value reference_count = 9;
+ * @param \Google\Protobuf\Int64Value $var
+ * @return $this
+ */
+ public function setReferenceCount($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Int64Value::class);
+ $this->reference_count = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Resources/CampaignCriterion.php b/src/Google/Ads/GoogleAds/V0/Resources/CampaignCriterion.php
new file mode 100644
index 000000000..a63f6bd57
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Resources/CampaignCriterion.php
@@ -0,0 +1,325 @@
+google.ads.googleads.v0.resources.CampaignCriterion
+ */
+class CampaignCriterion extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The resource name of the campaign criterion.
+ * Campaign criterion resource names have the form:
+ * `customers/{customer_id}/campaignCriteria/{campaign_id}_{criterion_id}
+ *
+ * Generated from protobuf field string resource_name = 1;
+ */
+ private $resource_name = '';
+ /**
+ * The campaign to which the criterion belongs.
+ * This field must not be used in WHERE clauses.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue campaign = 4;
+ */
+ private $campaign = null;
+ /**
+ * The ID of the criterion.
+ * This field is ignored during mutate.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value criterion_id = 5;
+ */
+ private $criterion_id = null;
+ /**
+ * The modifier for the bids when the criterion matches.
+ * Allowable modifier values depend on the criterion:
+ * - 0.1 - 10.0: Location
+ * - 0.1 - 4.0: Platform (mobile). Use 0 to opt out of mobile.
+ *
+ * Generated from protobuf field .google.protobuf.FloatValue bid_modifier = 14;
+ */
+ private $bid_modifier = null;
+ /**
+ * Whether to target (`false`) or exclude (`true`) the criterion.
+ *
+ * Generated from protobuf field .google.protobuf.BoolValue negative = 7;
+ */
+ private $negative = null;
+ /**
+ * The type of the criterion.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.CriterionTypeEnum.CriterionType type = 6;
+ */
+ private $type = 0;
+ protected $criterion;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Resources\CampaignCriterion::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * The resource name of the campaign criterion.
+ * Campaign criterion resource names have the form:
+ * `customers/{customer_id}/campaignCriteria/{campaign_id}_{criterion_id}
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @return string
+ */
+ public function getResourceName()
+ {
+ return $this->resource_name;
+ }
+
+ /**
+ * The resource name of the campaign criterion.
+ * Campaign criterion resource names have the form:
+ * `customers/{customer_id}/campaignCriteria/{campaign_id}_{criterion_id}
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @param string $var
+ * @return $this
+ */
+ public function setResourceName($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->resource_name = $var;
+
+ return $this;
+ }
+
+ /**
+ * The campaign to which the criterion belongs.
+ * This field must not be used in WHERE clauses.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue campaign = 4;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getCampaign()
+ {
+ return $this->campaign;
+ }
+
+ /**
+ * The campaign to which the criterion belongs.
+ * This field must not be used in WHERE clauses.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue campaign = 4;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setCampaign($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->campaign = $var;
+
+ return $this;
+ }
+
+ /**
+ * The ID of the criterion.
+ * This field is ignored during mutate.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value criterion_id = 5;
+ * @return \Google\Protobuf\Int64Value
+ */
+ public function getCriterionId()
+ {
+ return $this->criterion_id;
+ }
+
+ /**
+ * The ID of the criterion.
+ * This field is ignored during mutate.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value criterion_id = 5;
+ * @param \Google\Protobuf\Int64Value $var
+ * @return $this
+ */
+ public function setCriterionId($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Int64Value::class);
+ $this->criterion_id = $var;
+
+ return $this;
+ }
+
+ /**
+ * The modifier for the bids when the criterion matches.
+ * Allowable modifier values depend on the criterion:
+ * - 0.1 - 10.0: Location
+ * - 0.1 - 4.0: Platform (mobile). Use 0 to opt out of mobile.
+ *
+ * Generated from protobuf field .google.protobuf.FloatValue bid_modifier = 14;
+ * @return \Google\Protobuf\FloatValue
+ */
+ public function getBidModifier()
+ {
+ return $this->bid_modifier;
+ }
+
+ /**
+ * The modifier for the bids when the criterion matches.
+ * Allowable modifier values depend on the criterion:
+ * - 0.1 - 10.0: Location
+ * - 0.1 - 4.0: Platform (mobile). Use 0 to opt out of mobile.
+ *
+ * Generated from protobuf field .google.protobuf.FloatValue bid_modifier = 14;
+ * @param \Google\Protobuf\FloatValue $var
+ * @return $this
+ */
+ public function setBidModifier($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\FloatValue::class);
+ $this->bid_modifier = $var;
+
+ return $this;
+ }
+
+ /**
+ * Whether to target (`false`) or exclude (`true`) the criterion.
+ *
+ * Generated from protobuf field .google.protobuf.BoolValue negative = 7;
+ * @return \Google\Protobuf\BoolValue
+ */
+ public function getNegative()
+ {
+ return $this->negative;
+ }
+
+ /**
+ * Whether to target (`false`) or exclude (`true`) the criterion.
+ *
+ * Generated from protobuf field .google.protobuf.BoolValue negative = 7;
+ * @param \Google\Protobuf\BoolValue $var
+ * @return $this
+ */
+ public function setNegative($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\BoolValue::class);
+ $this->negative = $var;
+
+ return $this;
+ }
+
+ /**
+ * The type of the criterion.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.CriterionTypeEnum.CriterionType type = 6;
+ * @return int
+ */
+ public function getType()
+ {
+ return $this->type;
+ }
+
+ /**
+ * The type of the criterion.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.CriterionTypeEnum.CriterionType type = 6;
+ * @param int $var
+ * @return $this
+ */
+ public function setType($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Enums\CriterionTypeEnum_CriterionType::class);
+ $this->type = $var;
+
+ return $this;
+ }
+
+ /**
+ * Keyword.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.KeywordInfo keyword = 8;
+ * @return \Google\Ads\GoogleAds\V0\Common\KeywordInfo
+ */
+ public function getKeyword()
+ {
+ return $this->readOneof(8);
+ }
+
+ /**
+ * Keyword.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.KeywordInfo keyword = 8;
+ * @param \Google\Ads\GoogleAds\V0\Common\KeywordInfo $var
+ * @return $this
+ */
+ public function setKeyword($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Common\KeywordInfo::class);
+ $this->writeOneof(8, $var);
+
+ return $this;
+ }
+
+ /**
+ * Location.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.LocationInfo location = 12;
+ * @return \Google\Ads\GoogleAds\V0\Common\LocationInfo
+ */
+ public function getLocation()
+ {
+ return $this->readOneof(12);
+ }
+
+ /**
+ * Location.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.LocationInfo location = 12;
+ * @param \Google\Ads\GoogleAds\V0\Common\LocationInfo $var
+ * @return $this
+ */
+ public function setLocation($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Common\LocationInfo::class);
+ $this->writeOneof(12, $var);
+
+ return $this;
+ }
+
+ /**
+ * Platform.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.PlatformInfo platform = 13;
+ * @return \Google\Ads\GoogleAds\V0\Common\PlatformInfo
+ */
+ public function getPlatform()
+ {
+ return $this->readOneof(13);
+ }
+
+ /**
+ * Platform.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.PlatformInfo platform = 13;
+ * @param \Google\Ads\GoogleAds\V0\Common\PlatformInfo $var
+ * @return $this
+ */
+ public function setPlatform($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Common\PlatformInfo::class);
+ $this->writeOneof(13, $var);
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getCriterion()
+ {
+ return $this->whichOneof("criterion");
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Resources/Campaign_DynamicSearchAdsSetting.php b/src/Google/Ads/GoogleAds/V0/Resources/Campaign_DynamicSearchAdsSetting.php
new file mode 100644
index 000000000..b520982b5
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Resources/Campaign_DynamicSearchAdsSetting.php
@@ -0,0 +1,156 @@
+google.ads.googleads.v0.resources.Campaign.DynamicSearchAdsSetting
+ */
+class Campaign_DynamicSearchAdsSetting extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The Internet domain name that this setting represents, e.g., "google.com"
+ * or "www.google.com".
+ *
+ * Generated from protobuf field .google.protobuf.StringValue domain_name = 1;
+ */
+ private $domain_name = null;
+ /**
+ * The language code specifying the language of the domain, e.g., "en".
+ *
+ * Generated from protobuf field .google.protobuf.StringValue language_code = 2;
+ */
+ private $language_code = null;
+ /**
+ * Whether the campaign uses advertiser supplied URLs exclusively.
+ *
+ * Generated from protobuf field .google.protobuf.BoolValue use_supplied_urls_only = 3;
+ */
+ private $use_supplied_urls_only = null;
+ /**
+ * The list of page feeds associated with the campaign.
+ *
+ * Generated from protobuf field repeated .google.protobuf.Int64Value feed_ids = 4;
+ */
+ private $feed_ids;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Resources\Campaign::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * The Internet domain name that this setting represents, e.g., "google.com"
+ * or "www.google.com".
+ *
+ * Generated from protobuf field .google.protobuf.StringValue domain_name = 1;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getDomainName()
+ {
+ return $this->domain_name;
+ }
+
+ /**
+ * The Internet domain name that this setting represents, e.g., "google.com"
+ * or "www.google.com".
+ *
+ * Generated from protobuf field .google.protobuf.StringValue domain_name = 1;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setDomainName($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->domain_name = $var;
+
+ return $this;
+ }
+
+ /**
+ * The language code specifying the language of the domain, e.g., "en".
+ *
+ * Generated from protobuf field .google.protobuf.StringValue language_code = 2;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getLanguageCode()
+ {
+ return $this->language_code;
+ }
+
+ /**
+ * The language code specifying the language of the domain, e.g., "en".
+ *
+ * Generated from protobuf field .google.protobuf.StringValue language_code = 2;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setLanguageCode($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->language_code = $var;
+
+ return $this;
+ }
+
+ /**
+ * Whether the campaign uses advertiser supplied URLs exclusively.
+ *
+ * Generated from protobuf field .google.protobuf.BoolValue use_supplied_urls_only = 3;
+ * @return \Google\Protobuf\BoolValue
+ */
+ public function getUseSuppliedUrlsOnly()
+ {
+ return $this->use_supplied_urls_only;
+ }
+
+ /**
+ * Whether the campaign uses advertiser supplied URLs exclusively.
+ *
+ * Generated from protobuf field .google.protobuf.BoolValue use_supplied_urls_only = 3;
+ * @param \Google\Protobuf\BoolValue $var
+ * @return $this
+ */
+ public function setUseSuppliedUrlsOnly($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\BoolValue::class);
+ $this->use_supplied_urls_only = $var;
+
+ return $this;
+ }
+
+ /**
+ * The list of page feeds associated with the campaign.
+ *
+ * Generated from protobuf field repeated .google.protobuf.Int64Value feed_ids = 4;
+ * @return \Google\Protobuf\Internal\RepeatedField
+ */
+ public function getFeedIds()
+ {
+ return $this->feed_ids;
+ }
+
+ /**
+ * The list of page feeds associated with the campaign.
+ *
+ * Generated from protobuf field repeated .google.protobuf.Int64Value feed_ids = 4;
+ * @param \Google\Protobuf\Int64Value[]|\Google\Protobuf\Internal\RepeatedField $var
+ * @return $this
+ */
+ public function setFeedIds($var)
+ {
+ $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Int64Value::class);
+ $this->feed_ids = $arr;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Resources/Campaign_HotelSettingInfo.php b/src/Google/Ads/GoogleAds/V0/Resources/Campaign_HotelSettingInfo.php
new file mode 100644
index 000000000..0cb72b570
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Resources/Campaign_HotelSettingInfo.php
@@ -0,0 +1,57 @@
+google.ads.googleads.v0.resources.Campaign.HotelSettingInfo
+ */
+class Campaign_HotelSettingInfo extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The linked Hotel Center account.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value hotel_center_id = 1;
+ */
+ private $hotel_center_id = null;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Resources\Campaign::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * The linked Hotel Center account.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value hotel_center_id = 1;
+ * @return \Google\Protobuf\Int64Value
+ */
+ public function getHotelCenterId()
+ {
+ return $this->hotel_center_id;
+ }
+
+ /**
+ * The linked Hotel Center account.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value hotel_center_id = 1;
+ * @param \Google\Protobuf\Int64Value $var
+ * @return $this
+ */
+ public function setHotelCenterId($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Int64Value::class);
+ $this->hotel_center_id = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Resources/Campaign_NetworkSettings.php b/src/Google/Ads/GoogleAds/V0/Resources/Campaign_NetworkSettings.php
new file mode 100644
index 000000000..5765c7276
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Resources/Campaign_NetworkSettings.php
@@ -0,0 +1,162 @@
+google.ads.googleads.v0.resources.Campaign.NetworkSettings
+ */
+class Campaign_NetworkSettings extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * Whether ads will be served with google.com search results.
+ *
+ * Generated from protobuf field .google.protobuf.BoolValue target_google_search = 1;
+ */
+ private $target_google_search = null;
+ /**
+ * Whether ads will be served on partner sites in the Google Search Network
+ * (requires `target_google_search` to also be `true`).
+ *
+ * Generated from protobuf field .google.protobuf.BoolValue target_search_network = 2;
+ */
+ private $target_search_network = null;
+ /**
+ * Whether ads will be served on specified placements in the Google Display
+ * Network. Placements are specified using the Placement criterion.
+ *
+ * Generated from protobuf field .google.protobuf.BoolValue target_content_network = 3;
+ */
+ private $target_content_network = null;
+ /**
+ * Whether ads will be served on the Google Partner Network.
+ * This is available only to some select Google partner accounts.
+ *
+ * Generated from protobuf field .google.protobuf.BoolValue target_partner_search_network = 4;
+ */
+ private $target_partner_search_network = null;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Resources\Campaign::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * Whether ads will be served with google.com search results.
+ *
+ * Generated from protobuf field .google.protobuf.BoolValue target_google_search = 1;
+ * @return \Google\Protobuf\BoolValue
+ */
+ public function getTargetGoogleSearch()
+ {
+ return $this->target_google_search;
+ }
+
+ /**
+ * Whether ads will be served with google.com search results.
+ *
+ * Generated from protobuf field .google.protobuf.BoolValue target_google_search = 1;
+ * @param \Google\Protobuf\BoolValue $var
+ * @return $this
+ */
+ public function setTargetGoogleSearch($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\BoolValue::class);
+ $this->target_google_search = $var;
+
+ return $this;
+ }
+
+ /**
+ * Whether ads will be served on partner sites in the Google Search Network
+ * (requires `target_google_search` to also be `true`).
+ *
+ * Generated from protobuf field .google.protobuf.BoolValue target_search_network = 2;
+ * @return \Google\Protobuf\BoolValue
+ */
+ public function getTargetSearchNetwork()
+ {
+ return $this->target_search_network;
+ }
+
+ /**
+ * Whether ads will be served on partner sites in the Google Search Network
+ * (requires `target_google_search` to also be `true`).
+ *
+ * Generated from protobuf field .google.protobuf.BoolValue target_search_network = 2;
+ * @param \Google\Protobuf\BoolValue $var
+ * @return $this
+ */
+ public function setTargetSearchNetwork($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\BoolValue::class);
+ $this->target_search_network = $var;
+
+ return $this;
+ }
+
+ /**
+ * Whether ads will be served on specified placements in the Google Display
+ * Network. Placements are specified using the Placement criterion.
+ *
+ * Generated from protobuf field .google.protobuf.BoolValue target_content_network = 3;
+ * @return \Google\Protobuf\BoolValue
+ */
+ public function getTargetContentNetwork()
+ {
+ return $this->target_content_network;
+ }
+
+ /**
+ * Whether ads will be served on specified placements in the Google Display
+ * Network. Placements are specified using the Placement criterion.
+ *
+ * Generated from protobuf field .google.protobuf.BoolValue target_content_network = 3;
+ * @param \Google\Protobuf\BoolValue $var
+ * @return $this
+ */
+ public function setTargetContentNetwork($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\BoolValue::class);
+ $this->target_content_network = $var;
+
+ return $this;
+ }
+
+ /**
+ * Whether ads will be served on the Google Partner Network.
+ * This is available only to some select Google partner accounts.
+ *
+ * Generated from protobuf field .google.protobuf.BoolValue target_partner_search_network = 4;
+ * @return \Google\Protobuf\BoolValue
+ */
+ public function getTargetPartnerSearchNetwork()
+ {
+ return $this->target_partner_search_network;
+ }
+
+ /**
+ * Whether ads will be served on the Google Partner Network.
+ * This is available only to some select Google partner accounts.
+ *
+ * Generated from protobuf field .google.protobuf.BoolValue target_partner_search_network = 4;
+ * @param \Google\Protobuf\BoolValue $var
+ * @return $this
+ */
+ public function setTargetPartnerSearchNetwork($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\BoolValue::class);
+ $this->target_partner_search_network = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Resources/Customer.php b/src/Google/Ads/GoogleAds/V0/Resources/Customer.php
new file mode 100644
index 000000000..85f4f8b42
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Resources/Customer.php
@@ -0,0 +1,299 @@
+google.ads.googleads.v0.resources.Customer
+ */
+class Customer extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The resource name of the customer.
+ * Customer resource names have the form:
+ * `customers/{customer_id}`
+ *
+ * Generated from protobuf field string resource_name = 1;
+ */
+ private $resource_name = '';
+ /**
+ * The ID of the customer.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value id = 3;
+ */
+ private $id = null;
+ /**
+ * Optional, non-unique descriptive name of the customer.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue descriptive_name = 4;
+ */
+ private $descriptive_name = null;
+ /**
+ * The currency in which the account operates.
+ * A subset of the currency codes from the ISO 4217 standard is
+ * supported.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue currency_code = 5;
+ */
+ private $currency_code = null;
+ /**
+ * The local timezone ID of the customer.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue time_zone = 6;
+ */
+ private $time_zone = null;
+ /**
+ * The URL template for constructing a tracking URL out of parameters.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue tracking_url_template = 7;
+ */
+ private $tracking_url_template = null;
+ /**
+ * Whether auto-tagging is enabled for the customer.
+ *
+ * Generated from protobuf field .google.protobuf.BoolValue auto_tagging_enabled = 8;
+ */
+ private $auto_tagging_enabled = null;
+ /**
+ * Whether the Customer has a Partners program badge. If the Customer is not
+ * associated with the Partners program, this will be false. For more
+ * information, see https://support.google.com/partners/answer/3125774
+ *
+ * Generated from protobuf field .google.protobuf.BoolValue has_partners_badge = 9;
+ */
+ private $has_partners_badge = null;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Resources\Customer::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * The resource name of the customer.
+ * Customer resource names have the form:
+ * `customers/{customer_id}`
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @return string
+ */
+ public function getResourceName()
+ {
+ return $this->resource_name;
+ }
+
+ /**
+ * The resource name of the customer.
+ * Customer resource names have the form:
+ * `customers/{customer_id}`
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @param string $var
+ * @return $this
+ */
+ public function setResourceName($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->resource_name = $var;
+
+ return $this;
+ }
+
+ /**
+ * The ID of the customer.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value id = 3;
+ * @return \Google\Protobuf\Int64Value
+ */
+ public function getId()
+ {
+ return $this->id;
+ }
+
+ /**
+ * The ID of the customer.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value id = 3;
+ * @param \Google\Protobuf\Int64Value $var
+ * @return $this
+ */
+ public function setId($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Int64Value::class);
+ $this->id = $var;
+
+ return $this;
+ }
+
+ /**
+ * Optional, non-unique descriptive name of the customer.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue descriptive_name = 4;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getDescriptiveName()
+ {
+ return $this->descriptive_name;
+ }
+
+ /**
+ * Optional, non-unique descriptive name of the customer.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue descriptive_name = 4;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setDescriptiveName($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->descriptive_name = $var;
+
+ return $this;
+ }
+
+ /**
+ * The currency in which the account operates.
+ * A subset of the currency codes from the ISO 4217 standard is
+ * supported.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue currency_code = 5;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getCurrencyCode()
+ {
+ return $this->currency_code;
+ }
+
+ /**
+ * The currency in which the account operates.
+ * A subset of the currency codes from the ISO 4217 standard is
+ * supported.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue currency_code = 5;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setCurrencyCode($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->currency_code = $var;
+
+ return $this;
+ }
+
+ /**
+ * The local timezone ID of the customer.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue time_zone = 6;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getTimeZone()
+ {
+ return $this->time_zone;
+ }
+
+ /**
+ * The local timezone ID of the customer.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue time_zone = 6;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setTimeZone($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->time_zone = $var;
+
+ return $this;
+ }
+
+ /**
+ * The URL template for constructing a tracking URL out of parameters.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue tracking_url_template = 7;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getTrackingUrlTemplate()
+ {
+ return $this->tracking_url_template;
+ }
+
+ /**
+ * The URL template for constructing a tracking URL out of parameters.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue tracking_url_template = 7;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setTrackingUrlTemplate($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->tracking_url_template = $var;
+
+ return $this;
+ }
+
+ /**
+ * Whether auto-tagging is enabled for the customer.
+ *
+ * Generated from protobuf field .google.protobuf.BoolValue auto_tagging_enabled = 8;
+ * @return \Google\Protobuf\BoolValue
+ */
+ public function getAutoTaggingEnabled()
+ {
+ return $this->auto_tagging_enabled;
+ }
+
+ /**
+ * Whether auto-tagging is enabled for the customer.
+ *
+ * Generated from protobuf field .google.protobuf.BoolValue auto_tagging_enabled = 8;
+ * @param \Google\Protobuf\BoolValue $var
+ * @return $this
+ */
+ public function setAutoTaggingEnabled($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\BoolValue::class);
+ $this->auto_tagging_enabled = $var;
+
+ return $this;
+ }
+
+ /**
+ * Whether the Customer has a Partners program badge. If the Customer is not
+ * associated with the Partners program, this will be false. For more
+ * information, see https://support.google.com/partners/answer/3125774
+ *
+ * Generated from protobuf field .google.protobuf.BoolValue has_partners_badge = 9;
+ * @return \Google\Protobuf\BoolValue
+ */
+ public function getHasPartnersBadge()
+ {
+ return $this->has_partners_badge;
+ }
+
+ /**
+ * Whether the Customer has a Partners program badge. If the Customer is not
+ * associated with the Partners program, this will be false. For more
+ * information, see https://support.google.com/partners/answer/3125774
+ *
+ * Generated from protobuf field .google.protobuf.BoolValue has_partners_badge = 9;
+ * @param \Google\Protobuf\BoolValue $var
+ * @return $this
+ */
+ public function setHasPartnersBadge($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\BoolValue::class);
+ $this->has_partners_badge = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Resources/GeoTargetConstant.php b/src/Google/Ads/GoogleAds/V0/Resources/GeoTargetConstant.php
new file mode 100644
index 000000000..b986cc6f9
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Resources/GeoTargetConstant.php
@@ -0,0 +1,191 @@
+google.ads.googleads.v0.resources.GeoTargetConstant
+ */
+class GeoTargetConstant extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The resource name of the geo target constant.
+ * Geo target constant resource names have the form:
+ * `geoTargetConstants/{geo_target_constant_id}`
+ *
+ * Generated from protobuf field string resource_name = 1;
+ */
+ private $resource_name = '';
+ /**
+ * The ID of the geo target constant.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value id = 3;
+ */
+ private $id = null;
+ /**
+ * Geo target constant English name.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue name = 4;
+ */
+ private $name = null;
+ /**
+ * The ISO-3166-1 alpha-2 country code that is associated with the target.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue country_code = 5;
+ */
+ private $country_code = null;
+ /**
+ * Geo target constant target type.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue target_type = 6;
+ */
+ private $target_type = null;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Resources\GeoTargetConstant::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * The resource name of the geo target constant.
+ * Geo target constant resource names have the form:
+ * `geoTargetConstants/{geo_target_constant_id}`
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @return string
+ */
+ public function getResourceName()
+ {
+ return $this->resource_name;
+ }
+
+ /**
+ * The resource name of the geo target constant.
+ * Geo target constant resource names have the form:
+ * `geoTargetConstants/{geo_target_constant_id}`
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @param string $var
+ * @return $this
+ */
+ public function setResourceName($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->resource_name = $var;
+
+ return $this;
+ }
+
+ /**
+ * The ID of the geo target constant.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value id = 3;
+ * @return \Google\Protobuf\Int64Value
+ */
+ public function getId()
+ {
+ return $this->id;
+ }
+
+ /**
+ * The ID of the geo target constant.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value id = 3;
+ * @param \Google\Protobuf\Int64Value $var
+ * @return $this
+ */
+ public function setId($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Int64Value::class);
+ $this->id = $var;
+
+ return $this;
+ }
+
+ /**
+ * Geo target constant English name.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue name = 4;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getName()
+ {
+ return $this->name;
+ }
+
+ /**
+ * Geo target constant English name.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue name = 4;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setName($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->name = $var;
+
+ return $this;
+ }
+
+ /**
+ * The ISO-3166-1 alpha-2 country code that is associated with the target.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue country_code = 5;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getCountryCode()
+ {
+ return $this->country_code;
+ }
+
+ /**
+ * The ISO-3166-1 alpha-2 country code that is associated with the target.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue country_code = 5;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setCountryCode($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->country_code = $var;
+
+ return $this;
+ }
+
+ /**
+ * Geo target constant target type.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue target_type = 6;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getTargetType()
+ {
+ return $this->target_type;
+ }
+
+ /**
+ * Geo target constant target type.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue target_type = 6;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setTargetType($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->target_type = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Resources/GoogleAdsField.php b/src/Google/Ads/GoogleAds/V0/Resources/GoogleAdsField.php
new file mode 100644
index 000000000..73cac9b58
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Resources/GoogleAdsField.php
@@ -0,0 +1,521 @@
+google.ads.googleads.v0.resources.GoogleAdsField
+ */
+class GoogleAdsField extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The resource name of the artifact.
+ * Artifact resource names have the form:
+ * `googleAdsFields/{name}`
+ *
+ * Generated from protobuf field string resource_name = 1;
+ */
+ private $resource_name = '';
+ /**
+ * The name of the artifact.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue name = 2;
+ */
+ private $name = null;
+ /**
+ * The category of the artifact.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.GoogleAdsFieldCategoryEnum.GoogleAdsFieldCategory category = 3;
+ */
+ private $category = 0;
+ /**
+ * Whether the artifact can be used in a SELECT clause in search
+ * queries.
+ *
+ * Generated from protobuf field .google.protobuf.BoolValue selectable = 4;
+ */
+ private $selectable = null;
+ /**
+ * Whether the artifact can be used in a WHERE clause in search
+ * queries.
+ *
+ * Generated from protobuf field .google.protobuf.BoolValue filterable = 5;
+ */
+ private $filterable = null;
+ /**
+ * Whether the artifact can be used in a ORDER BY clause in search
+ * queries.
+ *
+ * Generated from protobuf field .google.protobuf.BoolValue sortable = 6;
+ */
+ private $sortable = null;
+ /**
+ * The names of all resources, segments, and metrics that are selectable with
+ * the described artifact.
+ *
+ * Generated from protobuf field repeated .google.protobuf.StringValue selectable_with = 7;
+ */
+ private $selectable_with;
+ /**
+ * The names of all resources that are selectable with the described
+ * artifact. Fields from these resources do not segment metrics when included
+ * in search queries.
+ * This field is only set for artifacts whose category is RESOURCE.
+ *
+ * Generated from protobuf field repeated .google.protobuf.StringValue attribute_resources = 8;
+ */
+ private $attribute_resources;
+ /**
+ * The names of all metrics that are selectable with the described artifact.
+ * This field is only set for artifacts whose category is either RESOURCE or
+ * SEGMENT.
+ *
+ * Generated from protobuf field repeated .google.protobuf.StringValue metrics = 9;
+ */
+ private $metrics;
+ /**
+ * The names of all artifacts, whether a segment or another resource, that
+ * segment metrics when included in search queries.
+ * This field is only set for artifacts of category RESOURCE, SEGMENT or
+ * METRIC.
+ *
+ * Generated from protobuf field repeated .google.protobuf.StringValue segments = 10;
+ */
+ private $segments;
+ /**
+ * Values the artifact can assume if it is a field of type ENUM.
+ * This field is only set for artifacts of category SEGMENT or ATTRIBUTE.
+ *
+ * Generated from protobuf field repeated .google.protobuf.StringValue enum_values = 11;
+ */
+ private $enum_values;
+ /**
+ * This field determines the operators that can be used with the artifact
+ * in WHERE clauses.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.GoogleAdsFieldDataTypeEnum.GoogleAdsFieldDataType data_type = 12;
+ */
+ private $data_type = 0;
+ /**
+ * The URL of proto describing the artifact's data type.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue type_url = 13;
+ */
+ private $type_url = null;
+ /**
+ * Whether the field artifact is repeated.
+ *
+ * Generated from protobuf field .google.protobuf.BoolValue is_repeated = 14;
+ */
+ private $is_repeated = null;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Resources\GoogleAdsField::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * The resource name of the artifact.
+ * Artifact resource names have the form:
+ * `googleAdsFields/{name}`
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @return string
+ */
+ public function getResourceName()
+ {
+ return $this->resource_name;
+ }
+
+ /**
+ * The resource name of the artifact.
+ * Artifact resource names have the form:
+ * `googleAdsFields/{name}`
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @param string $var
+ * @return $this
+ */
+ public function setResourceName($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->resource_name = $var;
+
+ return $this;
+ }
+
+ /**
+ * The name of the artifact.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue name = 2;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getName()
+ {
+ return $this->name;
+ }
+
+ /**
+ * The name of the artifact.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue name = 2;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setName($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->name = $var;
+
+ return $this;
+ }
+
+ /**
+ * The category of the artifact.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.GoogleAdsFieldCategoryEnum.GoogleAdsFieldCategory category = 3;
+ * @return int
+ */
+ public function getCategory()
+ {
+ return $this->category;
+ }
+
+ /**
+ * The category of the artifact.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.GoogleAdsFieldCategoryEnum.GoogleAdsFieldCategory category = 3;
+ * @param int $var
+ * @return $this
+ */
+ public function setCategory($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Enums\GoogleAdsFieldCategoryEnum_GoogleAdsFieldCategory::class);
+ $this->category = $var;
+
+ return $this;
+ }
+
+ /**
+ * Whether the artifact can be used in a SELECT clause in search
+ * queries.
+ *
+ * Generated from protobuf field .google.protobuf.BoolValue selectable = 4;
+ * @return \Google\Protobuf\BoolValue
+ */
+ public function getSelectable()
+ {
+ return $this->selectable;
+ }
+
+ /**
+ * Whether the artifact can be used in a SELECT clause in search
+ * queries.
+ *
+ * Generated from protobuf field .google.protobuf.BoolValue selectable = 4;
+ * @param \Google\Protobuf\BoolValue $var
+ * @return $this
+ */
+ public function setSelectable($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\BoolValue::class);
+ $this->selectable = $var;
+
+ return $this;
+ }
+
+ /**
+ * Whether the artifact can be used in a WHERE clause in search
+ * queries.
+ *
+ * Generated from protobuf field .google.protobuf.BoolValue filterable = 5;
+ * @return \Google\Protobuf\BoolValue
+ */
+ public function getFilterable()
+ {
+ return $this->filterable;
+ }
+
+ /**
+ * Whether the artifact can be used in a WHERE clause in search
+ * queries.
+ *
+ * Generated from protobuf field .google.protobuf.BoolValue filterable = 5;
+ * @param \Google\Protobuf\BoolValue $var
+ * @return $this
+ */
+ public function setFilterable($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\BoolValue::class);
+ $this->filterable = $var;
+
+ return $this;
+ }
+
+ /**
+ * Whether the artifact can be used in a ORDER BY clause in search
+ * queries.
+ *
+ * Generated from protobuf field .google.protobuf.BoolValue sortable = 6;
+ * @return \Google\Protobuf\BoolValue
+ */
+ public function getSortable()
+ {
+ return $this->sortable;
+ }
+
+ /**
+ * Whether the artifact can be used in a ORDER BY clause in search
+ * queries.
+ *
+ * Generated from protobuf field .google.protobuf.BoolValue sortable = 6;
+ * @param \Google\Protobuf\BoolValue $var
+ * @return $this
+ */
+ public function setSortable($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\BoolValue::class);
+ $this->sortable = $var;
+
+ return $this;
+ }
+
+ /**
+ * The names of all resources, segments, and metrics that are selectable with
+ * the described artifact.
+ *
+ * Generated from protobuf field repeated .google.protobuf.StringValue selectable_with = 7;
+ * @return \Google\Protobuf\Internal\RepeatedField
+ */
+ public function getSelectableWith()
+ {
+ return $this->selectable_with;
+ }
+
+ /**
+ * The names of all resources, segments, and metrics that are selectable with
+ * the described artifact.
+ *
+ * Generated from protobuf field repeated .google.protobuf.StringValue selectable_with = 7;
+ * @param \Google\Protobuf\StringValue[]|\Google\Protobuf\Internal\RepeatedField $var
+ * @return $this
+ */
+ public function setSelectableWith($var)
+ {
+ $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\StringValue::class);
+ $this->selectable_with = $arr;
+
+ return $this;
+ }
+
+ /**
+ * The names of all resources that are selectable with the described
+ * artifact. Fields from these resources do not segment metrics when included
+ * in search queries.
+ * This field is only set for artifacts whose category is RESOURCE.
+ *
+ * Generated from protobuf field repeated .google.protobuf.StringValue attribute_resources = 8;
+ * @return \Google\Protobuf\Internal\RepeatedField
+ */
+ public function getAttributeResources()
+ {
+ return $this->attribute_resources;
+ }
+
+ /**
+ * The names of all resources that are selectable with the described
+ * artifact. Fields from these resources do not segment metrics when included
+ * in search queries.
+ * This field is only set for artifacts whose category is RESOURCE.
+ *
+ * Generated from protobuf field repeated .google.protobuf.StringValue attribute_resources = 8;
+ * @param \Google\Protobuf\StringValue[]|\Google\Protobuf\Internal\RepeatedField $var
+ * @return $this
+ */
+ public function setAttributeResources($var)
+ {
+ $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\StringValue::class);
+ $this->attribute_resources = $arr;
+
+ return $this;
+ }
+
+ /**
+ * The names of all metrics that are selectable with the described artifact.
+ * This field is only set for artifacts whose category is either RESOURCE or
+ * SEGMENT.
+ *
+ * Generated from protobuf field repeated .google.protobuf.StringValue metrics = 9;
+ * @return \Google\Protobuf\Internal\RepeatedField
+ */
+ public function getMetrics()
+ {
+ return $this->metrics;
+ }
+
+ /**
+ * The names of all metrics that are selectable with the described artifact.
+ * This field is only set for artifacts whose category is either RESOURCE or
+ * SEGMENT.
+ *
+ * Generated from protobuf field repeated .google.protobuf.StringValue metrics = 9;
+ * @param \Google\Protobuf\StringValue[]|\Google\Protobuf\Internal\RepeatedField $var
+ * @return $this
+ */
+ public function setMetrics($var)
+ {
+ $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\StringValue::class);
+ $this->metrics = $arr;
+
+ return $this;
+ }
+
+ /**
+ * The names of all artifacts, whether a segment or another resource, that
+ * segment metrics when included in search queries.
+ * This field is only set for artifacts of category RESOURCE, SEGMENT or
+ * METRIC.
+ *
+ * Generated from protobuf field repeated .google.protobuf.StringValue segments = 10;
+ * @return \Google\Protobuf\Internal\RepeatedField
+ */
+ public function getSegments()
+ {
+ return $this->segments;
+ }
+
+ /**
+ * The names of all artifacts, whether a segment or another resource, that
+ * segment metrics when included in search queries.
+ * This field is only set for artifacts of category RESOURCE, SEGMENT or
+ * METRIC.
+ *
+ * Generated from protobuf field repeated .google.protobuf.StringValue segments = 10;
+ * @param \Google\Protobuf\StringValue[]|\Google\Protobuf\Internal\RepeatedField $var
+ * @return $this
+ */
+ public function setSegments($var)
+ {
+ $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\StringValue::class);
+ $this->segments = $arr;
+
+ return $this;
+ }
+
+ /**
+ * Values the artifact can assume if it is a field of type ENUM.
+ * This field is only set for artifacts of category SEGMENT or ATTRIBUTE.
+ *
+ * Generated from protobuf field repeated .google.protobuf.StringValue enum_values = 11;
+ * @return \Google\Protobuf\Internal\RepeatedField
+ */
+ public function getEnumValues()
+ {
+ return $this->enum_values;
+ }
+
+ /**
+ * Values the artifact can assume if it is a field of type ENUM.
+ * This field is only set for artifacts of category SEGMENT or ATTRIBUTE.
+ *
+ * Generated from protobuf field repeated .google.protobuf.StringValue enum_values = 11;
+ * @param \Google\Protobuf\StringValue[]|\Google\Protobuf\Internal\RepeatedField $var
+ * @return $this
+ */
+ public function setEnumValues($var)
+ {
+ $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\StringValue::class);
+ $this->enum_values = $arr;
+
+ return $this;
+ }
+
+ /**
+ * This field determines the operators that can be used with the artifact
+ * in WHERE clauses.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.GoogleAdsFieldDataTypeEnum.GoogleAdsFieldDataType data_type = 12;
+ * @return int
+ */
+ public function getDataType()
+ {
+ return $this->data_type;
+ }
+
+ /**
+ * This field determines the operators that can be used with the artifact
+ * in WHERE clauses.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.GoogleAdsFieldDataTypeEnum.GoogleAdsFieldDataType data_type = 12;
+ * @param int $var
+ * @return $this
+ */
+ public function setDataType($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Enums\GoogleAdsFieldDataTypeEnum_GoogleAdsFieldDataType::class);
+ $this->data_type = $var;
+
+ return $this;
+ }
+
+ /**
+ * The URL of proto describing the artifact's data type.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue type_url = 13;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getTypeUrl()
+ {
+ return $this->type_url;
+ }
+
+ /**
+ * The URL of proto describing the artifact's data type.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue type_url = 13;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setTypeUrl($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->type_url = $var;
+
+ return $this;
+ }
+
+ /**
+ * Whether the field artifact is repeated.
+ *
+ * Generated from protobuf field .google.protobuf.BoolValue is_repeated = 14;
+ * @return \Google\Protobuf\BoolValue
+ */
+ public function getIsRepeated()
+ {
+ return $this->is_repeated;
+ }
+
+ /**
+ * Whether the field artifact is repeated.
+ *
+ * Generated from protobuf field .google.protobuf.BoolValue is_repeated = 14;
+ * @param \Google\Protobuf\BoolValue $var
+ * @return $this
+ */
+ public function setIsRepeated($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\BoolValue::class);
+ $this->is_repeated = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Resources/KeywordView.php b/src/Google/Ads/GoogleAds/V0/Resources/KeywordView.php
new file mode 100644
index 000000000..62bf4244d
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Resources/KeywordView.php
@@ -0,0 +1,63 @@
+google.ads.googleads.v0.resources.KeywordView
+ */
+class KeywordView extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The resource name of the keyword view.
+ * Keyword view resource names have the form:
+ * `customers/{customer_id}/keywordViews/{ad_group_id}_{criterion_id}`
+ *
+ * Generated from protobuf field string resource_name = 1;
+ */
+ private $resource_name = '';
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Resources\KeywordView::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * The resource name of the keyword view.
+ * Keyword view resource names have the form:
+ * `customers/{customer_id}/keywordViews/{ad_group_id}_{criterion_id}`
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @return string
+ */
+ public function getResourceName()
+ {
+ return $this->resource_name;
+ }
+
+ /**
+ * The resource name of the keyword view.
+ * Keyword view resource names have the form:
+ * `customers/{customer_id}/keywordViews/{ad_group_id}_{criterion_id}`
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @param string $var
+ * @return $this
+ */
+ public function setResourceName($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->resource_name = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Resources/Recommendation.php b/src/Google/Ads/GoogleAds/V0/Resources/Recommendation.php
new file mode 100644
index 000000000..77706d032
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Resources/Recommendation.php
@@ -0,0 +1,372 @@
+google.ads.googleads.v0.resources.Recommendation
+ */
+class Recommendation extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The resource name of the recommendation.
+ * `customers/{customer_id}/recommendations/{recommendation_id}`
+ *
+ * Generated from protobuf field string resource_name = 1;
+ */
+ private $resource_name = '';
+ /**
+ * The type of recommendation.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.RecommendationTypeEnum.RecommendationType type = 2;
+ */
+ private $type = 0;
+ /**
+ * The impact on account performance as a result of applying the
+ * recommendation.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.Recommendation.RecommendationImpact impact = 3;
+ */
+ private $impact = null;
+ /**
+ * The budget targeted by this recommendation. This will be set only when
+ * the recommendation affects a single campaign budget.
+ * This field must not be used in WHERE clauses.
+ * This field will be set for the following recommendation types:
+ * CAMPAIGN_BUDGET
+ *
+ * Generated from protobuf field .google.protobuf.StringValue campaign_budget = 5;
+ */
+ private $campaign_budget = null;
+ /**
+ * The campaign targeted by this recommendation. This will be set only when
+ * the recommendation affects a single campaign.
+ * This field must not be used in WHERE clauses.
+ * This field will be set for the following recommendation types:
+ * KEYWORD, TEXT_AD, TARGET_CPA_OPT_IN
+ *
+ * Generated from protobuf field .google.protobuf.StringValue campaign = 6;
+ */
+ private $campaign = null;
+ /**
+ * The ad group targeted by this recommendation. This will be set only when
+ * the recommendation affects a single ad group.
+ * This field must not be used in WHERE clauses.
+ * This field will be set for the following recommendation types:
+ * KEYWORD, TEXT_AD
+ *
+ * Generated from protobuf field .google.protobuf.StringValue ad_group = 7;
+ */
+ private $ad_group = null;
+ protected $recommendation;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Resources\Recommendation::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * The resource name of the recommendation.
+ * `customers/{customer_id}/recommendations/{recommendation_id}`
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @return string
+ */
+ public function getResourceName()
+ {
+ return $this->resource_name;
+ }
+
+ /**
+ * The resource name of the recommendation.
+ * `customers/{customer_id}/recommendations/{recommendation_id}`
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @param string $var
+ * @return $this
+ */
+ public function setResourceName($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->resource_name = $var;
+
+ return $this;
+ }
+
+ /**
+ * The type of recommendation.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.RecommendationTypeEnum.RecommendationType type = 2;
+ * @return int
+ */
+ public function getType()
+ {
+ return $this->type;
+ }
+
+ /**
+ * The type of recommendation.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.RecommendationTypeEnum.RecommendationType type = 2;
+ * @param int $var
+ * @return $this
+ */
+ public function setType($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Enums\RecommendationTypeEnum_RecommendationType::class);
+ $this->type = $var;
+
+ return $this;
+ }
+
+ /**
+ * The impact on account performance as a result of applying the
+ * recommendation.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.Recommendation.RecommendationImpact impact = 3;
+ * @return \Google\Ads\GoogleAds\V0\Resources\Recommendation_RecommendationImpact
+ */
+ public function getImpact()
+ {
+ return $this->impact;
+ }
+
+ /**
+ * The impact on account performance as a result of applying the
+ * recommendation.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.Recommendation.RecommendationImpact impact = 3;
+ * @param \Google\Ads\GoogleAds\V0\Resources\Recommendation_RecommendationImpact $var
+ * @return $this
+ */
+ public function setImpact($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Resources\Recommendation_RecommendationImpact::class);
+ $this->impact = $var;
+
+ return $this;
+ }
+
+ /**
+ * The budget targeted by this recommendation. This will be set only when
+ * the recommendation affects a single campaign budget.
+ * This field must not be used in WHERE clauses.
+ * This field will be set for the following recommendation types:
+ * CAMPAIGN_BUDGET
+ *
+ * Generated from protobuf field .google.protobuf.StringValue campaign_budget = 5;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getCampaignBudget()
+ {
+ return $this->campaign_budget;
+ }
+
+ /**
+ * The budget targeted by this recommendation. This will be set only when
+ * the recommendation affects a single campaign budget.
+ * This field must not be used in WHERE clauses.
+ * This field will be set for the following recommendation types:
+ * CAMPAIGN_BUDGET
+ *
+ * Generated from protobuf field .google.protobuf.StringValue campaign_budget = 5;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setCampaignBudget($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->campaign_budget = $var;
+
+ return $this;
+ }
+
+ /**
+ * The campaign targeted by this recommendation. This will be set only when
+ * the recommendation affects a single campaign.
+ * This field must not be used in WHERE clauses.
+ * This field will be set for the following recommendation types:
+ * KEYWORD, TEXT_AD, TARGET_CPA_OPT_IN
+ *
+ * Generated from protobuf field .google.protobuf.StringValue campaign = 6;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getCampaign()
+ {
+ return $this->campaign;
+ }
+
+ /**
+ * The campaign targeted by this recommendation. This will be set only when
+ * the recommendation affects a single campaign.
+ * This field must not be used in WHERE clauses.
+ * This field will be set for the following recommendation types:
+ * KEYWORD, TEXT_AD, TARGET_CPA_OPT_IN
+ *
+ * Generated from protobuf field .google.protobuf.StringValue campaign = 6;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setCampaign($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->campaign = $var;
+
+ return $this;
+ }
+
+ /**
+ * The ad group targeted by this recommendation. This will be set only when
+ * the recommendation affects a single ad group.
+ * This field must not be used in WHERE clauses.
+ * This field will be set for the following recommendation types:
+ * KEYWORD, TEXT_AD
+ *
+ * Generated from protobuf field .google.protobuf.StringValue ad_group = 7;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getAdGroup()
+ {
+ return $this->ad_group;
+ }
+
+ /**
+ * The ad group targeted by this recommendation. This will be set only when
+ * the recommendation affects a single ad group.
+ * This field must not be used in WHERE clauses.
+ * This field will be set for the following recommendation types:
+ * KEYWORD, TEXT_AD
+ *
+ * Generated from protobuf field .google.protobuf.StringValue ad_group = 7;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setAdGroup($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->ad_group = $var;
+
+ return $this;
+ }
+
+ /**
+ * The campaign budget recommendation.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.Recommendation.CampaignBudgetRecommendation campaign_budget_recommendation = 4;
+ * @return \Google\Ads\GoogleAds\V0\Resources\Recommendation_CampaignBudgetRecommendation
+ */
+ public function getCampaignBudgetRecommendation()
+ {
+ return $this->readOneof(4);
+ }
+
+ /**
+ * The campaign budget recommendation.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.Recommendation.CampaignBudgetRecommendation campaign_budget_recommendation = 4;
+ * @param \Google\Ads\GoogleAds\V0\Resources\Recommendation_CampaignBudgetRecommendation $var
+ * @return $this
+ */
+ public function setCampaignBudgetRecommendation($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Resources\Recommendation_CampaignBudgetRecommendation::class);
+ $this->writeOneof(4, $var);
+
+ return $this;
+ }
+
+ /**
+ * The keyword recommendation.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.Recommendation.KeywordRecommendation keyword_recommendation = 8;
+ * @return \Google\Ads\GoogleAds\V0\Resources\Recommendation_KeywordRecommendation
+ */
+ public function getKeywordRecommendation()
+ {
+ return $this->readOneof(8);
+ }
+
+ /**
+ * The keyword recommendation.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.Recommendation.KeywordRecommendation keyword_recommendation = 8;
+ * @param \Google\Ads\GoogleAds\V0\Resources\Recommendation_KeywordRecommendation $var
+ * @return $this
+ */
+ public function setKeywordRecommendation($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Resources\Recommendation_KeywordRecommendation::class);
+ $this->writeOneof(8, $var);
+
+ return $this;
+ }
+
+ /**
+ * Add expanded text ad recommendation.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.Recommendation.TextAdRecommendation text_ad_recommendation = 9;
+ * @return \Google\Ads\GoogleAds\V0\Resources\Recommendation_TextAdRecommendation
+ */
+ public function getTextAdRecommendation()
+ {
+ return $this->readOneof(9);
+ }
+
+ /**
+ * Add expanded text ad recommendation.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.Recommendation.TextAdRecommendation text_ad_recommendation = 9;
+ * @param \Google\Ads\GoogleAds\V0\Resources\Recommendation_TextAdRecommendation $var
+ * @return $this
+ */
+ public function setTextAdRecommendation($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Resources\Recommendation_TextAdRecommendation::class);
+ $this->writeOneof(9, $var);
+
+ return $this;
+ }
+
+ /**
+ * The TargetCPA opt-in recommendation.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.Recommendation.TargetCpaOptInRecommendation target_cpa_opt_in_recommendation = 10;
+ * @return \Google\Ads\GoogleAds\V0\Resources\Recommendation_TargetCpaOptInRecommendation
+ */
+ public function getTargetCpaOptInRecommendation()
+ {
+ return $this->readOneof(10);
+ }
+
+ /**
+ * The TargetCPA opt-in recommendation.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.Recommendation.TargetCpaOptInRecommendation target_cpa_opt_in_recommendation = 10;
+ * @param \Google\Ads\GoogleAds\V0\Resources\Recommendation_TargetCpaOptInRecommendation $var
+ * @return $this
+ */
+ public function setTargetCpaOptInRecommendation($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Resources\Recommendation_TargetCpaOptInRecommendation::class);
+ $this->writeOneof(10, $var);
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getRecommendation()
+ {
+ return $this->whichOneof("recommendation");
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Resources/Recommendation_CampaignBudgetRecommendation.php b/src/Google/Ads/GoogleAds/V0/Resources/Recommendation_CampaignBudgetRecommendation.php
new file mode 100644
index 000000000..3781d07e1
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Resources/Recommendation_CampaignBudgetRecommendation.php
@@ -0,0 +1,124 @@
+google.ads.googleads.v0.resources.Recommendation.CampaignBudgetRecommendation
+ */
+class Recommendation_CampaignBudgetRecommendation extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The current budget amount in micros.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value current_budget_amount_micros = 1;
+ */
+ private $current_budget_amount_micros = null;
+ /**
+ * The recommended budget amount in micros.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value recommended_budget_amount_micros = 2;
+ */
+ private $recommended_budget_amount_micros = null;
+ /**
+ * The budget amounts and associated impact estimates for some values of
+ * possible budget amounts.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.resources.Recommendation.CampaignBudgetRecommendation.CampaignBudgetRecommendationOption budget_options = 3;
+ */
+ private $budget_options;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Resources\Recommendation::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * The current budget amount in micros.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value current_budget_amount_micros = 1;
+ * @return \Google\Protobuf\Int64Value
+ */
+ public function getCurrentBudgetAmountMicros()
+ {
+ return $this->current_budget_amount_micros;
+ }
+
+ /**
+ * The current budget amount in micros.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value current_budget_amount_micros = 1;
+ * @param \Google\Protobuf\Int64Value $var
+ * @return $this
+ */
+ public function setCurrentBudgetAmountMicros($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Int64Value::class);
+ $this->current_budget_amount_micros = $var;
+
+ return $this;
+ }
+
+ /**
+ * The recommended budget amount in micros.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value recommended_budget_amount_micros = 2;
+ * @return \Google\Protobuf\Int64Value
+ */
+ public function getRecommendedBudgetAmountMicros()
+ {
+ return $this->recommended_budget_amount_micros;
+ }
+
+ /**
+ * The recommended budget amount in micros.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value recommended_budget_amount_micros = 2;
+ * @param \Google\Protobuf\Int64Value $var
+ * @return $this
+ */
+ public function setRecommendedBudgetAmountMicros($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Int64Value::class);
+ $this->recommended_budget_amount_micros = $var;
+
+ return $this;
+ }
+
+ /**
+ * The budget amounts and associated impact estimates for some values of
+ * possible budget amounts.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.resources.Recommendation.CampaignBudgetRecommendation.CampaignBudgetRecommendationOption budget_options = 3;
+ * @return \Google\Protobuf\Internal\RepeatedField
+ */
+ public function getBudgetOptions()
+ {
+ return $this->budget_options;
+ }
+
+ /**
+ * The budget amounts and associated impact estimates for some values of
+ * possible budget amounts.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.resources.Recommendation.CampaignBudgetRecommendation.CampaignBudgetRecommendationOption budget_options = 3;
+ * @param \Google\Ads\GoogleAds\V0\Resources\Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption[]|\Google\Protobuf\Internal\RepeatedField $var
+ * @return $this
+ */
+ public function setBudgetOptions($var)
+ {
+ $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Ads\GoogleAds\V0\Resources\Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption::class);
+ $this->budget_options = $arr;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Resources/Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption.php b/src/Google/Ads/GoogleAds/V0/Resources/Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption.php
new file mode 100644
index 000000000..441834ed1
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Resources/Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption.php
@@ -0,0 +1,92 @@
+google.ads.googleads.v0.resources.Recommendation.CampaignBudgetRecommendation.CampaignBudgetRecommendationOption
+ */
+class Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The budget amount for this option.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value budget_amount_micros = 1;
+ */
+ private $budget_amount_micros = null;
+ /**
+ * The impact estimate if budget is changed to amount specified in this
+ * option.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.Recommendation.RecommendationImpact impact = 2;
+ */
+ private $impact = null;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Resources\Recommendation::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * The budget amount for this option.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value budget_amount_micros = 1;
+ * @return \Google\Protobuf\Int64Value
+ */
+ public function getBudgetAmountMicros()
+ {
+ return $this->budget_amount_micros;
+ }
+
+ /**
+ * The budget amount for this option.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value budget_amount_micros = 1;
+ * @param \Google\Protobuf\Int64Value $var
+ * @return $this
+ */
+ public function setBudgetAmountMicros($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Int64Value::class);
+ $this->budget_amount_micros = $var;
+
+ return $this;
+ }
+
+ /**
+ * The impact estimate if budget is changed to amount specified in this
+ * option.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.Recommendation.RecommendationImpact impact = 2;
+ * @return \Google\Ads\GoogleAds\V0\Resources\Recommendation_RecommendationImpact
+ */
+ public function getImpact()
+ {
+ return $this->impact;
+ }
+
+ /**
+ * The impact estimate if budget is changed to amount specified in this
+ * option.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.Recommendation.RecommendationImpact impact = 2;
+ * @param \Google\Ads\GoogleAds\V0\Resources\Recommendation_RecommendationImpact $var
+ * @return $this
+ */
+ public function setImpact($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Resources\Recommendation_RecommendationImpact::class);
+ $this->impact = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Resources/Recommendation_KeywordRecommendation.php b/src/Google/Ads/GoogleAds/V0/Resources/Recommendation_KeywordRecommendation.php
new file mode 100644
index 000000000..d8ce90ed2
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Resources/Recommendation_KeywordRecommendation.php
@@ -0,0 +1,89 @@
+google.ads.googleads.v0.resources.Recommendation.KeywordRecommendation
+ */
+class Recommendation_KeywordRecommendation extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The recommended keyword.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.KeywordInfo keyword = 1;
+ */
+ private $keyword = null;
+ /**
+ * The recommended CPC (cost-per-click) bid.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value recommended_cpc_bid_micros = 2;
+ */
+ private $recommended_cpc_bid_micros = null;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Resources\Recommendation::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * The recommended keyword.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.KeywordInfo keyword = 1;
+ * @return \Google\Ads\GoogleAds\V0\Common\KeywordInfo
+ */
+ public function getKeyword()
+ {
+ return $this->keyword;
+ }
+
+ /**
+ * The recommended keyword.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.KeywordInfo keyword = 1;
+ * @param \Google\Ads\GoogleAds\V0\Common\KeywordInfo $var
+ * @return $this
+ */
+ public function setKeyword($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Common\KeywordInfo::class);
+ $this->keyword = $var;
+
+ return $this;
+ }
+
+ /**
+ * The recommended CPC (cost-per-click) bid.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value recommended_cpc_bid_micros = 2;
+ * @return \Google\Protobuf\Int64Value
+ */
+ public function getRecommendedCpcBidMicros()
+ {
+ return $this->recommended_cpc_bid_micros;
+ }
+
+ /**
+ * The recommended CPC (cost-per-click) bid.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value recommended_cpc_bid_micros = 2;
+ * @param \Google\Protobuf\Int64Value $var
+ * @return $this
+ */
+ public function setRecommendedCpcBidMicros($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Int64Value::class);
+ $this->recommended_cpc_bid_micros = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Resources/Recommendation_RecommendationImpact.php b/src/Google/Ads/GoogleAds/V0/Resources/Recommendation_RecommendationImpact.php
new file mode 100644
index 000000000..1eecd6ce5
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Resources/Recommendation_RecommendationImpact.php
@@ -0,0 +1,90 @@
+google.ads.googleads.v0.resources.Recommendation.RecommendationImpact
+ */
+class Recommendation_RecommendationImpact extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * Base metrics at the time the recommendation was generated.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.Recommendation.RecommendationMetrics base_metrics = 1;
+ */
+ private $base_metrics = null;
+ /**
+ * Estimated metrics if the recommendation is applied.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.Recommendation.RecommendationMetrics potential_metrics = 2;
+ */
+ private $potential_metrics = null;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Resources\Recommendation::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * Base metrics at the time the recommendation was generated.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.Recommendation.RecommendationMetrics base_metrics = 1;
+ * @return \Google\Ads\GoogleAds\V0\Resources\Recommendation_RecommendationMetrics
+ */
+ public function getBaseMetrics()
+ {
+ return $this->base_metrics;
+ }
+
+ /**
+ * Base metrics at the time the recommendation was generated.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.Recommendation.RecommendationMetrics base_metrics = 1;
+ * @param \Google\Ads\GoogleAds\V0\Resources\Recommendation_RecommendationMetrics $var
+ * @return $this
+ */
+ public function setBaseMetrics($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Resources\Recommendation_RecommendationMetrics::class);
+ $this->base_metrics = $var;
+
+ return $this;
+ }
+
+ /**
+ * Estimated metrics if the recommendation is applied.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.Recommendation.RecommendationMetrics potential_metrics = 2;
+ * @return \Google\Ads\GoogleAds\V0\Resources\Recommendation_RecommendationMetrics
+ */
+ public function getPotentialMetrics()
+ {
+ return $this->potential_metrics;
+ }
+
+ /**
+ * Estimated metrics if the recommendation is applied.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.Recommendation.RecommendationMetrics potential_metrics = 2;
+ * @param \Google\Ads\GoogleAds\V0\Resources\Recommendation_RecommendationMetrics $var
+ * @return $this
+ */
+ public function setPotentialMetrics($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Resources\Recommendation_RecommendationMetrics::class);
+ $this->potential_metrics = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Resources/Recommendation_RecommendationMetrics.php b/src/Google/Ads/GoogleAds/V0/Resources/Recommendation_RecommendationMetrics.php
new file mode 100644
index 000000000..ddd4913ba
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Resources/Recommendation_RecommendationMetrics.php
@@ -0,0 +1,186 @@
+google.ads.googleads.v0.resources.Recommendation.RecommendationMetrics
+ */
+class Recommendation_RecommendationMetrics extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * Number of ad impressions.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue impressions = 1;
+ */
+ private $impressions = null;
+ /**
+ * Number of ad clicks.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue clicks = 2;
+ */
+ private $clicks = null;
+ /**
+ * Cost (in micros) for advertising, in the local currency for the account.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value cost_micros = 3;
+ */
+ private $cost_micros = null;
+ /**
+ * Number of conversions.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue conversions = 4;
+ */
+ private $conversions = null;
+ /**
+ * Number of video views for a video ad campaign.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue video_views = 5;
+ */
+ private $video_views = null;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Resources\Recommendation::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * Number of ad impressions.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue impressions = 1;
+ * @return \Google\Protobuf\DoubleValue
+ */
+ public function getImpressions()
+ {
+ return $this->impressions;
+ }
+
+ /**
+ * Number of ad impressions.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue impressions = 1;
+ * @param \Google\Protobuf\DoubleValue $var
+ * @return $this
+ */
+ public function setImpressions($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\DoubleValue::class);
+ $this->impressions = $var;
+
+ return $this;
+ }
+
+ /**
+ * Number of ad clicks.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue clicks = 2;
+ * @return \Google\Protobuf\DoubleValue
+ */
+ public function getClicks()
+ {
+ return $this->clicks;
+ }
+
+ /**
+ * Number of ad clicks.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue clicks = 2;
+ * @param \Google\Protobuf\DoubleValue $var
+ * @return $this
+ */
+ public function setClicks($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\DoubleValue::class);
+ $this->clicks = $var;
+
+ return $this;
+ }
+
+ /**
+ * Cost (in micros) for advertising, in the local currency for the account.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value cost_micros = 3;
+ * @return \Google\Protobuf\Int64Value
+ */
+ public function getCostMicros()
+ {
+ return $this->cost_micros;
+ }
+
+ /**
+ * Cost (in micros) for advertising, in the local currency for the account.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value cost_micros = 3;
+ * @param \Google\Protobuf\Int64Value $var
+ * @return $this
+ */
+ public function setCostMicros($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Int64Value::class);
+ $this->cost_micros = $var;
+
+ return $this;
+ }
+
+ /**
+ * Number of conversions.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue conversions = 4;
+ * @return \Google\Protobuf\DoubleValue
+ */
+ public function getConversions()
+ {
+ return $this->conversions;
+ }
+
+ /**
+ * Number of conversions.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue conversions = 4;
+ * @param \Google\Protobuf\DoubleValue $var
+ * @return $this
+ */
+ public function setConversions($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\DoubleValue::class);
+ $this->conversions = $var;
+
+ return $this;
+ }
+
+ /**
+ * Number of video views for a video ad campaign.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue video_views = 5;
+ * @return \Google\Protobuf\DoubleValue
+ */
+ public function getVideoViews()
+ {
+ return $this->video_views;
+ }
+
+ /**
+ * Number of video views for a video ad campaign.
+ *
+ * Generated from protobuf field .google.protobuf.DoubleValue video_views = 5;
+ * @param \Google\Protobuf\DoubleValue $var
+ * @return $this
+ */
+ public function setVideoViews($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\DoubleValue::class);
+ $this->video_views = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Resources/Recommendation_TargetCpaOptInRecommendation.php b/src/Google/Ads/GoogleAds/V0/Resources/Recommendation_TargetCpaOptInRecommendation.php
new file mode 100644
index 000000000..d43dd09f4
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Resources/Recommendation_TargetCpaOptInRecommendation.php
@@ -0,0 +1,92 @@
+google.ads.googleads.v0.resources.Recommendation.TargetCpaOptInRecommendation
+ */
+class Recommendation_TargetCpaOptInRecommendation extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The available goals and corresponding options for Target CPA strategy.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.resources.Recommendation.TargetCpaOptInRecommendation.TargetCpaOptInRecommendationOption options = 1;
+ */
+ private $options;
+ /**
+ * The recommended average CPA target. See required budget amount and impact
+ * of using this recommendation in options list.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value recommended_target_cpa_micros = 2;
+ */
+ private $recommended_target_cpa_micros = null;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Resources\Recommendation::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * The available goals and corresponding options for Target CPA strategy.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.resources.Recommendation.TargetCpaOptInRecommendation.TargetCpaOptInRecommendationOption options = 1;
+ * @return \Google\Protobuf\Internal\RepeatedField
+ */
+ public function getOptions()
+ {
+ return $this->options;
+ }
+
+ /**
+ * The available goals and corresponding options for Target CPA strategy.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.resources.Recommendation.TargetCpaOptInRecommendation.TargetCpaOptInRecommendationOption options = 1;
+ * @param \Google\Ads\GoogleAds\V0\Resources\Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption[]|\Google\Protobuf\Internal\RepeatedField $var
+ * @return $this
+ */
+ public function setOptions($var)
+ {
+ $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Ads\GoogleAds\V0\Resources\Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption::class);
+ $this->options = $arr;
+
+ return $this;
+ }
+
+ /**
+ * The recommended average CPA target. See required budget amount and impact
+ * of using this recommendation in options list.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value recommended_target_cpa_micros = 2;
+ * @return \Google\Protobuf\Int64Value
+ */
+ public function getRecommendedTargetCpaMicros()
+ {
+ return $this->recommended_target_cpa_micros;
+ }
+
+ /**
+ * The recommended average CPA target. See required budget amount and impact
+ * of using this recommendation in options list.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value recommended_target_cpa_micros = 2;
+ * @param \Google\Protobuf\Int64Value $var
+ * @return $this
+ */
+ public function setRecommendedTargetCpaMicros($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Int64Value::class);
+ $this->recommended_target_cpa_micros = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Resources/Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption.php b/src/Google/Ads/GoogleAds/V0/Resources/Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption.php
new file mode 100644
index 000000000..fe5e1028b
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Resources/Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption.php
@@ -0,0 +1,162 @@
+google.ads.googleads.v0.resources.Recommendation.TargetCpaOptInRecommendation.TargetCpaOptInRecommendationOption
+ */
+class Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The goal achieved by this option.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.TargetCpaOptInRecommendationGoalEnum.TargetCpaOptInRecommendationGoal goal = 1;
+ */
+ private $goal = 0;
+ /**
+ * Average CPA target.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value target_cpa_micros = 2;
+ */
+ private $target_cpa_micros = null;
+ /**
+ * The minimum campaign budget, in local currency for the account,
+ * required to achieve the target CPA.
+ * Amount is specified in micros, where one million is equivalent to one
+ * currency unit.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value required_campaign_budget_amount_micros = 3;
+ */
+ private $required_campaign_budget_amount_micros = null;
+ /**
+ * The impact estimate if this option is selected.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.Recommendation.RecommendationImpact impact = 4;
+ */
+ private $impact = null;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Resources\Recommendation::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * The goal achieved by this option.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.TargetCpaOptInRecommendationGoalEnum.TargetCpaOptInRecommendationGoal goal = 1;
+ * @return int
+ */
+ public function getGoal()
+ {
+ return $this->goal;
+ }
+
+ /**
+ * The goal achieved by this option.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.TargetCpaOptInRecommendationGoalEnum.TargetCpaOptInRecommendationGoal goal = 1;
+ * @param int $var
+ * @return $this
+ */
+ public function setGoal($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Enums\TargetCpaOptInRecommendationGoalEnum_TargetCpaOptInRecommendationGoal::class);
+ $this->goal = $var;
+
+ return $this;
+ }
+
+ /**
+ * Average CPA target.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value target_cpa_micros = 2;
+ * @return \Google\Protobuf\Int64Value
+ */
+ public function getTargetCpaMicros()
+ {
+ return $this->target_cpa_micros;
+ }
+
+ /**
+ * Average CPA target.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value target_cpa_micros = 2;
+ * @param \Google\Protobuf\Int64Value $var
+ * @return $this
+ */
+ public function setTargetCpaMicros($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Int64Value::class);
+ $this->target_cpa_micros = $var;
+
+ return $this;
+ }
+
+ /**
+ * The minimum campaign budget, in local currency for the account,
+ * required to achieve the target CPA.
+ * Amount is specified in micros, where one million is equivalent to one
+ * currency unit.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value required_campaign_budget_amount_micros = 3;
+ * @return \Google\Protobuf\Int64Value
+ */
+ public function getRequiredCampaignBudgetAmountMicros()
+ {
+ return $this->required_campaign_budget_amount_micros;
+ }
+
+ /**
+ * The minimum campaign budget, in local currency for the account,
+ * required to achieve the target CPA.
+ * Amount is specified in micros, where one million is equivalent to one
+ * currency unit.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value required_campaign_budget_amount_micros = 3;
+ * @param \Google\Protobuf\Int64Value $var
+ * @return $this
+ */
+ public function setRequiredCampaignBudgetAmountMicros($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Int64Value::class);
+ $this->required_campaign_budget_amount_micros = $var;
+
+ return $this;
+ }
+
+ /**
+ * The impact estimate if this option is selected.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.Recommendation.RecommendationImpact impact = 4;
+ * @return \Google\Ads\GoogleAds\V0\Resources\Recommendation_RecommendationImpact
+ */
+ public function getImpact()
+ {
+ return $this->impact;
+ }
+
+ /**
+ * The impact estimate if this option is selected.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.Recommendation.RecommendationImpact impact = 4;
+ * @param \Google\Ads\GoogleAds\V0\Resources\Recommendation_RecommendationImpact $var
+ * @return $this
+ */
+ public function setImpact($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Resources\Recommendation_RecommendationImpact::class);
+ $this->impact = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Resources/Recommendation_TextAdRecommendation.php b/src/Google/Ads/GoogleAds/V0/Resources/Recommendation_TextAdRecommendation.php
new file mode 100644
index 000000000..50ca9c7ce
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Resources/Recommendation_TextAdRecommendation.php
@@ -0,0 +1,130 @@
+google.ads.googleads.v0.resources.Recommendation.TextAdRecommendation
+ */
+class Recommendation_TextAdRecommendation extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * Recommended ad.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.Ad ad = 1;
+ */
+ private $ad = null;
+ /**
+ * Creation date of the recommended ad.
+ * YYYY-MM-DD format, e.g., 2018-04-17.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue creation_date = 2;
+ */
+ private $creation_date = null;
+ /**
+ * Date, if present, is the earliest when the recommendation will be auto
+ * applied.
+ * YYYY-MM-DD format, e.g., 2018-04-17.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue auto_apply_date = 3;
+ */
+ private $auto_apply_date = null;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Resources\Recommendation::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * Recommended ad.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.Ad ad = 1;
+ * @return \Google\Ads\GoogleAds\V0\Common\Ad
+ */
+ public function getAd()
+ {
+ return $this->ad;
+ }
+
+ /**
+ * Recommended ad.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.Ad ad = 1;
+ * @param \Google\Ads\GoogleAds\V0\Common\Ad $var
+ * @return $this
+ */
+ public function setAd($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Common\Ad::class);
+ $this->ad = $var;
+
+ return $this;
+ }
+
+ /**
+ * Creation date of the recommended ad.
+ * YYYY-MM-DD format, e.g., 2018-04-17.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue creation_date = 2;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getCreationDate()
+ {
+ return $this->creation_date;
+ }
+
+ /**
+ * Creation date of the recommended ad.
+ * YYYY-MM-DD format, e.g., 2018-04-17.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue creation_date = 2;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setCreationDate($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->creation_date = $var;
+
+ return $this;
+ }
+
+ /**
+ * Date, if present, is the earliest when the recommendation will be auto
+ * applied.
+ * YYYY-MM-DD format, e.g., 2018-04-17.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue auto_apply_date = 3;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getAutoApplyDate()
+ {
+ return $this->auto_apply_date;
+ }
+
+ /**
+ * Date, if present, is the earliest when the recommendation will be auto
+ * applied.
+ * YYYY-MM-DD format, e.g., 2018-04-17.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue auto_apply_date = 3;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setAutoApplyDate($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->auto_apply_date = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Services/AdGroupAdOperation.php b/src/Google/Ads/GoogleAds/V0/Services/AdGroupAdOperation.php
new file mode 100644
index 000000000..5be2a8a3f
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/AdGroupAdOperation.php
@@ -0,0 +1,148 @@
+google.ads.googleads.v0.services.AdGroupAdOperation
+ */
+class AdGroupAdOperation extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * FieldMask that determines which resource fields are modified in an update.
+ *
+ * Generated from protobuf field .google.protobuf.FieldMask update_mask = 4;
+ */
+ private $update_mask = null;
+ protected $operation;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Services\AdGroupAdService::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * FieldMask that determines which resource fields are modified in an update.
+ *
+ * Generated from protobuf field .google.protobuf.FieldMask update_mask = 4;
+ * @return \Google\Protobuf\FieldMask
+ */
+ public function getUpdateMask()
+ {
+ return $this->update_mask;
+ }
+
+ /**
+ * FieldMask that determines which resource fields are modified in an update.
+ *
+ * Generated from protobuf field .google.protobuf.FieldMask update_mask = 4;
+ * @param \Google\Protobuf\FieldMask $var
+ * @return $this
+ */
+ public function setUpdateMask($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\FieldMask::class);
+ $this->update_mask = $var;
+
+ return $this;
+ }
+
+ /**
+ * Create operation: No resource name is expected for the new ad.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.AdGroupAd create = 1;
+ * @return \Google\Ads\GoogleAds\V0\Resources\AdGroupAd
+ */
+ public function getCreate()
+ {
+ return $this->readOneof(1);
+ }
+
+ /**
+ * Create operation: No resource name is expected for the new ad.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.AdGroupAd create = 1;
+ * @param \Google\Ads\GoogleAds\V0\Resources\AdGroupAd $var
+ * @return $this
+ */
+ public function setCreate($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Resources\AdGroupAd::class);
+ $this->writeOneof(1, $var);
+
+ return $this;
+ }
+
+ /**
+ * Update operation: The ad is expected to have a valid resource name.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.AdGroupAd update = 2;
+ * @return \Google\Ads\GoogleAds\V0\Resources\AdGroupAd
+ */
+ public function getUpdate()
+ {
+ return $this->readOneof(2);
+ }
+
+ /**
+ * Update operation: The ad is expected to have a valid resource name.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.AdGroupAd update = 2;
+ * @param \Google\Ads\GoogleAds\V0\Resources\AdGroupAd $var
+ * @return $this
+ */
+ public function setUpdate($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Resources\AdGroupAd::class);
+ $this->writeOneof(2, $var);
+
+ return $this;
+ }
+
+ /**
+ * Remove operation: A resource name for the removed ad is expected,
+ * in this format:
+ * `customers/{customer_id}/adGroupAds/{ad_group_id}_{ad_id}`
+ *
+ * Generated from protobuf field string remove = 3;
+ * @return string
+ */
+ public function getRemove()
+ {
+ return $this->readOneof(3);
+ }
+
+ /**
+ * Remove operation: A resource name for the removed ad is expected,
+ * in this format:
+ * `customers/{customer_id}/adGroupAds/{ad_group_id}_{ad_id}`
+ *
+ * Generated from protobuf field string remove = 3;
+ * @param string $var
+ * @return $this
+ */
+ public function setRemove($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->writeOneof(3, $var);
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getOperation()
+ {
+ return $this->whichOneof("operation");
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Services/AdGroupAdServiceClient.php b/src/Google/Ads/GoogleAds/V0/Services/AdGroupAdServiceClient.php
new file mode 100644
index 000000000..e71072ed6
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/AdGroupAdServiceClient.php
@@ -0,0 +1,42 @@
+_simpleRequest('/google.ads.googleads.v0.services.AdGroupAdService/GetAdGroupAd',
+ $argument,
+ ['\Google\Ads\GoogleAds\V0\Resources\AdGroupAd', 'decode'],
+ $metadata, $options);
+ }
+
+ /**
+ * Creates, updates, or removes ads. Operation statuses are returned.
+ * @param \Google\Ads\GoogleAds\V0\Services\MutateAdGroupAdsRequest $argument input argument
+ * @param array $metadata metadata
+ * @param array $options call options
+ */
+ public function MutateAdGroupAds(\Google\Ads\GoogleAds\V0\Services\MutateAdGroupAdsRequest $argument,
+ $metadata = [], $options = []) {
+ return $this->_simpleRequest('/google.ads.googleads.v0.services.AdGroupAdService/MutateAdGroupAds',
+ $argument,
+ ['\Google\Ads\GoogleAds\V0\Services\MutateAdGroupAdsResponse', 'decode'],
+ $metadata, $options);
+ }
+
+}
diff --git a/src/Google/Ads/GoogleAds/V0/Services/AdGroupBidModifierOperation.php b/src/Google/Ads/GoogleAds/V0/Services/AdGroupBidModifierOperation.php
new file mode 100644
index 000000000..21fed2bcc
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/AdGroupBidModifierOperation.php
@@ -0,0 +1,152 @@
+google.ads.googleads.v0.services.AdGroupBidModifierOperation
+ */
+class AdGroupBidModifierOperation extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * FieldMask that determines which resource fields are modified in an update.
+ *
+ * Generated from protobuf field .google.protobuf.FieldMask update_mask = 4;
+ */
+ private $update_mask = null;
+ protected $operation;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Services\AdGroupBidModifierService::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * FieldMask that determines which resource fields are modified in an update.
+ *
+ * Generated from protobuf field .google.protobuf.FieldMask update_mask = 4;
+ * @return \Google\Protobuf\FieldMask
+ */
+ public function getUpdateMask()
+ {
+ return $this->update_mask;
+ }
+
+ /**
+ * FieldMask that determines which resource fields are modified in an update.
+ *
+ * Generated from protobuf field .google.protobuf.FieldMask update_mask = 4;
+ * @param \Google\Protobuf\FieldMask $var
+ * @return $this
+ */
+ public function setUpdateMask($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\FieldMask::class);
+ $this->update_mask = $var;
+
+ return $this;
+ }
+
+ /**
+ * Create operation: No resource name is expected for the new ad group bid
+ * modifier.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.AdGroupBidModifier create = 1;
+ * @return \Google\Ads\GoogleAds\V0\Resources\AdGroupBidModifier
+ */
+ public function getCreate()
+ {
+ return $this->readOneof(1);
+ }
+
+ /**
+ * Create operation: No resource name is expected for the new ad group bid
+ * modifier.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.AdGroupBidModifier create = 1;
+ * @param \Google\Ads\GoogleAds\V0\Resources\AdGroupBidModifier $var
+ * @return $this
+ */
+ public function setCreate($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Resources\AdGroupBidModifier::class);
+ $this->writeOneof(1, $var);
+
+ return $this;
+ }
+
+ /**
+ * Update operation: The ad group bid modifier is expected to have a valid
+ * resource name.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.AdGroupBidModifier update = 2;
+ * @return \Google\Ads\GoogleAds\V0\Resources\AdGroupBidModifier
+ */
+ public function getUpdate()
+ {
+ return $this->readOneof(2);
+ }
+
+ /**
+ * Update operation: The ad group bid modifier is expected to have a valid
+ * resource name.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.AdGroupBidModifier update = 2;
+ * @param \Google\Ads\GoogleAds\V0\Resources\AdGroupBidModifier $var
+ * @return $this
+ */
+ public function setUpdate($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Resources\AdGroupBidModifier::class);
+ $this->writeOneof(2, $var);
+
+ return $this;
+ }
+
+ /**
+ * Remove operation: A resource name for the removed ad group bid modifier
+ * is expected, in this format:
+ * `customers/{customer_id}/adGroupBidModifiers/{ad_group_id}_{criterion_id}`
+ *
+ * Generated from protobuf field string remove = 3;
+ * @return string
+ */
+ public function getRemove()
+ {
+ return $this->readOneof(3);
+ }
+
+ /**
+ * Remove operation: A resource name for the removed ad group bid modifier
+ * is expected, in this format:
+ * `customers/{customer_id}/adGroupBidModifiers/{ad_group_id}_{criterion_id}`
+ *
+ * Generated from protobuf field string remove = 3;
+ * @param string $var
+ * @return $this
+ */
+ public function setRemove($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->writeOneof(3, $var);
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getOperation()
+ {
+ return $this->whichOneof("operation");
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Services/AdGroupBidModifierServiceClient.php b/src/Google/Ads/GoogleAds/V0/Services/AdGroupBidModifierServiceClient.php
new file mode 100644
index 000000000..6b4a817fb
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/AdGroupBidModifierServiceClient.php
@@ -0,0 +1,42 @@
+_simpleRequest('/google.ads.googleads.v0.services.AdGroupBidModifierService/GetAdGroupBidModifier',
+ $argument,
+ ['\Google\Ads\GoogleAds\V0\Resources\AdGroupBidModifier', 'decode'],
+ $metadata, $options);
+ }
+
+ /**
+ * Creates, updates, or removes ad group bid modifiers.
+ * Operation statuses are returned.
+ * @param \Google\Ads\GoogleAds\V0\Services\MutateAdGroupBidModifiersRequest $argument input argument
+ * @param array $metadata metadata
+ * @param array $options call options
+ */
+ public function MutateAdGroupBidModifiers(\Google\Ads\GoogleAds\V0\Services\MutateAdGroupBidModifiersRequest $argument,
+ $metadata = [], $options = []) {
+ return $this->_simpleRequest('/google.ads.googleads.v0.services.AdGroupBidModifierService/MutateAdGroupBidModifiers',
+ $argument,
+ ['\Google\Ads\GoogleAds\V0\Services\MutateAdGroupBidModifiersResponse', 'decode'],
+ $metadata, $options);
+ }
+
+}
diff --git a/src/Google/Ads/GoogleAds/V0/Services/AdGroupCriterionOperation.php b/src/Google/Ads/GoogleAds/V0/Services/AdGroupCriterionOperation.php
new file mode 100644
index 000000000..5a053aba2
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/AdGroupCriterionOperation.php
@@ -0,0 +1,150 @@
+google.ads.googleads.v0.services.AdGroupCriterionOperation
+ */
+class AdGroupCriterionOperation extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * FieldMask that determines which resource fields are modified in an update.
+ *
+ * Generated from protobuf field .google.protobuf.FieldMask update_mask = 4;
+ */
+ private $update_mask = null;
+ protected $operation;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Services\AdGroupCriterionService::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * FieldMask that determines which resource fields are modified in an update.
+ *
+ * Generated from protobuf field .google.protobuf.FieldMask update_mask = 4;
+ * @return \Google\Protobuf\FieldMask
+ */
+ public function getUpdateMask()
+ {
+ return $this->update_mask;
+ }
+
+ /**
+ * FieldMask that determines which resource fields are modified in an update.
+ *
+ * Generated from protobuf field .google.protobuf.FieldMask update_mask = 4;
+ * @param \Google\Protobuf\FieldMask $var
+ * @return $this
+ */
+ public function setUpdateMask($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\FieldMask::class);
+ $this->update_mask = $var;
+
+ return $this;
+ }
+
+ /**
+ * Create operation: No resource name is expected for the new criterion.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.AdGroupCriterion create = 1;
+ * @return \Google\Ads\GoogleAds\V0\Resources\AdGroupCriterion
+ */
+ public function getCreate()
+ {
+ return $this->readOneof(1);
+ }
+
+ /**
+ * Create operation: No resource name is expected for the new criterion.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.AdGroupCriterion create = 1;
+ * @param \Google\Ads\GoogleAds\V0\Resources\AdGroupCriterion $var
+ * @return $this
+ */
+ public function setCreate($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Resources\AdGroupCriterion::class);
+ $this->writeOneof(1, $var);
+
+ return $this;
+ }
+
+ /**
+ * Update operation: The criterion is expected to have a valid resource
+ * name.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.AdGroupCriterion update = 2;
+ * @return \Google\Ads\GoogleAds\V0\Resources\AdGroupCriterion
+ */
+ public function getUpdate()
+ {
+ return $this->readOneof(2);
+ }
+
+ /**
+ * Update operation: The criterion is expected to have a valid resource
+ * name.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.AdGroupCriterion update = 2;
+ * @param \Google\Ads\GoogleAds\V0\Resources\AdGroupCriterion $var
+ * @return $this
+ */
+ public function setUpdate($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Resources\AdGroupCriterion::class);
+ $this->writeOneof(2, $var);
+
+ return $this;
+ }
+
+ /**
+ * Remove operation: A resource name for the removed criterion is expected,
+ * in this format:
+ * `customers/{customer_id}/adGroupCriteria/{ad_group_id}_{criterion_id}`
+ *
+ * Generated from protobuf field string remove = 3;
+ * @return string
+ */
+ public function getRemove()
+ {
+ return $this->readOneof(3);
+ }
+
+ /**
+ * Remove operation: A resource name for the removed criterion is expected,
+ * in this format:
+ * `customers/{customer_id}/adGroupCriteria/{ad_group_id}_{criterion_id}`
+ *
+ * Generated from protobuf field string remove = 3;
+ * @param string $var
+ * @return $this
+ */
+ public function setRemove($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->writeOneof(3, $var);
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getOperation()
+ {
+ return $this->whichOneof("operation");
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Services/AdGroupCriterionServiceClient.php b/src/Google/Ads/GoogleAds/V0/Services/AdGroupCriterionServiceClient.php
new file mode 100644
index 000000000..ec4cb83cb
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/AdGroupCriterionServiceClient.php
@@ -0,0 +1,42 @@
+_simpleRequest('/google.ads.googleads.v0.services.AdGroupCriterionService/GetAdGroupCriterion',
+ $argument,
+ ['\Google\Ads\GoogleAds\V0\Resources\AdGroupCriterion', 'decode'],
+ $metadata, $options);
+ }
+
+ /**
+ * Creates, updates, or removes criteria. Operation statuses are returned.
+ * @param \Google\Ads\GoogleAds\V0\Services\MutateAdGroupCriteriaRequest $argument input argument
+ * @param array $metadata metadata
+ * @param array $options call options
+ */
+ public function MutateAdGroupCriteria(\Google\Ads\GoogleAds\V0\Services\MutateAdGroupCriteriaRequest $argument,
+ $metadata = [], $options = []) {
+ return $this->_simpleRequest('/google.ads.googleads.v0.services.AdGroupCriterionService/MutateAdGroupCriteria',
+ $argument,
+ ['\Google\Ads\GoogleAds\V0\Services\MutateAdGroupCriteriaResponse', 'decode'],
+ $metadata, $options);
+ }
+
+}
diff --git a/src/Google/Ads/GoogleAds/V0/Services/AdGroupOperation.php b/src/Google/Ads/GoogleAds/V0/Services/AdGroupOperation.php
new file mode 100644
index 000000000..05a1c519c
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/AdGroupOperation.php
@@ -0,0 +1,148 @@
+google.ads.googleads.v0.services.AdGroupOperation
+ */
+class AdGroupOperation extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * FieldMask that determines which resource fields are modified in an update.
+ *
+ * Generated from protobuf field .google.protobuf.FieldMask update_mask = 4;
+ */
+ private $update_mask = null;
+ protected $operation;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Services\AdGroupService::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * FieldMask that determines which resource fields are modified in an update.
+ *
+ * Generated from protobuf field .google.protobuf.FieldMask update_mask = 4;
+ * @return \Google\Protobuf\FieldMask
+ */
+ public function getUpdateMask()
+ {
+ return $this->update_mask;
+ }
+
+ /**
+ * FieldMask that determines which resource fields are modified in an update.
+ *
+ * Generated from protobuf field .google.protobuf.FieldMask update_mask = 4;
+ * @param \Google\Protobuf\FieldMask $var
+ * @return $this
+ */
+ public function setUpdateMask($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\FieldMask::class);
+ $this->update_mask = $var;
+
+ return $this;
+ }
+
+ /**
+ * Create operation: No resource name is expected for the new ad group.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.AdGroup create = 1;
+ * @return \Google\Ads\GoogleAds\V0\Resources\AdGroup
+ */
+ public function getCreate()
+ {
+ return $this->readOneof(1);
+ }
+
+ /**
+ * Create operation: No resource name is expected for the new ad group.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.AdGroup create = 1;
+ * @param \Google\Ads\GoogleAds\V0\Resources\AdGroup $var
+ * @return $this
+ */
+ public function setCreate($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Resources\AdGroup::class);
+ $this->writeOneof(1, $var);
+
+ return $this;
+ }
+
+ /**
+ * Update operation: The ad group is expected to have a valid resource name.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.AdGroup update = 2;
+ * @return \Google\Ads\GoogleAds\V0\Resources\AdGroup
+ */
+ public function getUpdate()
+ {
+ return $this->readOneof(2);
+ }
+
+ /**
+ * Update operation: The ad group is expected to have a valid resource name.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.AdGroup update = 2;
+ * @param \Google\Ads\GoogleAds\V0\Resources\AdGroup $var
+ * @return $this
+ */
+ public function setUpdate($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Resources\AdGroup::class);
+ $this->writeOneof(2, $var);
+
+ return $this;
+ }
+
+ /**
+ * Remove operation: A resource name for the removed ad group is expected,
+ * in this format:
+ * `customers/{customer_id}/adGroups/{ad_group_id}`
+ *
+ * Generated from protobuf field string remove = 3;
+ * @return string
+ */
+ public function getRemove()
+ {
+ return $this->readOneof(3);
+ }
+
+ /**
+ * Remove operation: A resource name for the removed ad group is expected,
+ * in this format:
+ * `customers/{customer_id}/adGroups/{ad_group_id}`
+ *
+ * Generated from protobuf field string remove = 3;
+ * @param string $var
+ * @return $this
+ */
+ public function setRemove($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->writeOneof(3, $var);
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getOperation()
+ {
+ return $this->whichOneof("operation");
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Services/AdGroupServiceClient.php b/src/Google/Ads/GoogleAds/V0/Services/AdGroupServiceClient.php
new file mode 100644
index 000000000..e53921658
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/AdGroupServiceClient.php
@@ -0,0 +1,42 @@
+_simpleRequest('/google.ads.googleads.v0.services.AdGroupService/GetAdGroup',
+ $argument,
+ ['\Google\Ads\GoogleAds\V0\Resources\AdGroup', 'decode'],
+ $metadata, $options);
+ }
+
+ /**
+ * Creates, updates, or removes ad groups. Operation statuses are returned.
+ * @param \Google\Ads\GoogleAds\V0\Services\MutateAdGroupsRequest $argument input argument
+ * @param array $metadata metadata
+ * @param array $options call options
+ */
+ public function MutateAdGroups(\Google\Ads\GoogleAds\V0\Services\MutateAdGroupsRequest $argument,
+ $metadata = [], $options = []) {
+ return $this->_simpleRequest('/google.ads.googleads.v0.services.AdGroupService/MutateAdGroups',
+ $argument,
+ ['\Google\Ads\GoogleAds\V0\Services\MutateAdGroupsResponse', 'decode'],
+ $metadata, $options);
+ }
+
+}
diff --git a/src/Google/Ads/GoogleAds/V0/Services/ApplyRecommendationOperation.php b/src/Google/Ads/GoogleAds/V0/Services/ApplyRecommendationOperation.php
new file mode 100644
index 000000000..79b72c3bf
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/ApplyRecommendationOperation.php
@@ -0,0 +1,176 @@
+google.ads.googleads.v0.services.ApplyRecommendationOperation
+ */
+class ApplyRecommendationOperation extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The resource name of the recommendation to apply.
+ *
+ * Generated from protobuf field string resource_name = 1;
+ */
+ private $resource_name = '';
+ protected $apply_parameters;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Services\RecommendationService::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * The resource name of the recommendation to apply.
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @return string
+ */
+ public function getResourceName()
+ {
+ return $this->resource_name;
+ }
+
+ /**
+ * The resource name of the recommendation to apply.
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @param string $var
+ * @return $this
+ */
+ public function setResourceName($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->resource_name = $var;
+
+ return $this;
+ }
+
+ /**
+ * Optional parameters to use when applying a campaign budget
+ * recommendation.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.services.ApplyRecommendationOperation.CampaignBudgetParameters campaign_budget = 2;
+ * @return \Google\Ads\GoogleAds\V0\Services\ApplyRecommendationOperation_CampaignBudgetParameters
+ */
+ public function getCampaignBudget()
+ {
+ return $this->readOneof(2);
+ }
+
+ /**
+ * Optional parameters to use when applying a campaign budget
+ * recommendation.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.services.ApplyRecommendationOperation.CampaignBudgetParameters campaign_budget = 2;
+ * @param \Google\Ads\GoogleAds\V0\Services\ApplyRecommendationOperation_CampaignBudgetParameters $var
+ * @return $this
+ */
+ public function setCampaignBudget($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Services\ApplyRecommendationOperation_CampaignBudgetParameters::class);
+ $this->writeOneof(2, $var);
+
+ return $this;
+ }
+
+ /**
+ * Optional parameters to use when applying a text ad recommendation.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.services.ApplyRecommendationOperation.TextAdParameters text_ad = 3;
+ * @return \Google\Ads\GoogleAds\V0\Services\ApplyRecommendationOperation_TextAdParameters
+ */
+ public function getTextAd()
+ {
+ return $this->readOneof(3);
+ }
+
+ /**
+ * Optional parameters to use when applying a text ad recommendation.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.services.ApplyRecommendationOperation.TextAdParameters text_ad = 3;
+ * @param \Google\Ads\GoogleAds\V0\Services\ApplyRecommendationOperation_TextAdParameters $var
+ * @return $this
+ */
+ public function setTextAd($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Services\ApplyRecommendationOperation_TextAdParameters::class);
+ $this->writeOneof(3, $var);
+
+ return $this;
+ }
+
+ /**
+ * Optional parameters to use when applying keyword recommendation.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.services.ApplyRecommendationOperation.KeywordParameters keyword = 4;
+ * @return \Google\Ads\GoogleAds\V0\Services\ApplyRecommendationOperation_KeywordParameters
+ */
+ public function getKeyword()
+ {
+ return $this->readOneof(4);
+ }
+
+ /**
+ * Optional parameters to use when applying keyword recommendation.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.services.ApplyRecommendationOperation.KeywordParameters keyword = 4;
+ * @param \Google\Ads\GoogleAds\V0\Services\ApplyRecommendationOperation_KeywordParameters $var
+ * @return $this
+ */
+ public function setKeyword($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Services\ApplyRecommendationOperation_KeywordParameters::class);
+ $this->writeOneof(4, $var);
+
+ return $this;
+ }
+
+ /**
+ * Optional parameters to use when applying target CPA opt-in
+ * recommendation.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.services.ApplyRecommendationOperation.TargetCpaOptInParameters target_cpa_opt_in = 5;
+ * @return \Google\Ads\GoogleAds\V0\Services\ApplyRecommendationOperation_TargetCpaOptInParameters
+ */
+ public function getTargetCpaOptIn()
+ {
+ return $this->readOneof(5);
+ }
+
+ /**
+ * Optional parameters to use when applying target CPA opt-in
+ * recommendation.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.services.ApplyRecommendationOperation.TargetCpaOptInParameters target_cpa_opt_in = 5;
+ * @param \Google\Ads\GoogleAds\V0\Services\ApplyRecommendationOperation_TargetCpaOptInParameters $var
+ * @return $this
+ */
+ public function setTargetCpaOptIn($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Services\ApplyRecommendationOperation_TargetCpaOptInParameters::class);
+ $this->writeOneof(5, $var);
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getApplyParameters()
+ {
+ return $this->whichOneof("apply_parameters");
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Services/ApplyRecommendationOperation_CampaignBudgetParameters.php b/src/Google/Ads/GoogleAds/V0/Services/ApplyRecommendationOperation_CampaignBudgetParameters.php
new file mode 100644
index 000000000..528fb7986
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/ApplyRecommendationOperation_CampaignBudgetParameters.php
@@ -0,0 +1,60 @@
+google.ads.googleads.v0.services.ApplyRecommendationOperation.CampaignBudgetParameters
+ */
+class ApplyRecommendationOperation_CampaignBudgetParameters extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * New budget amount to set for target budget resource. This is a required
+ * field.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value new_budget_amount_micros = 1;
+ */
+ private $new_budget_amount_micros = null;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Services\RecommendationService::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * New budget amount to set for target budget resource. This is a required
+ * field.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value new_budget_amount_micros = 1;
+ * @return \Google\Protobuf\Int64Value
+ */
+ public function getNewBudgetAmountMicros()
+ {
+ return $this->new_budget_amount_micros;
+ }
+
+ /**
+ * New budget amount to set for target budget resource. This is a required
+ * field.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value new_budget_amount_micros = 1;
+ * @param \Google\Protobuf\Int64Value $var
+ * @return $this
+ */
+ public function setNewBudgetAmountMicros($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Int64Value::class);
+ $this->new_budget_amount_micros = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Services/ApplyRecommendationOperation_KeywordParameters.php b/src/Google/Ads/GoogleAds/V0/Services/ApplyRecommendationOperation_KeywordParameters.php
new file mode 100644
index 000000000..f721ed21d
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/ApplyRecommendationOperation_KeywordParameters.php
@@ -0,0 +1,124 @@
+google.ads.googleads.v0.services.ApplyRecommendationOperation.KeywordParameters
+ */
+class ApplyRecommendationOperation_KeywordParameters extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The ad group resource to add keyword to. This is a required field.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue ad_group = 1;
+ */
+ private $ad_group = null;
+ /**
+ * The match type of the keyword. This is a required field.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.KeywordMatchTypeEnum.KeywordMatchType match_type = 2;
+ */
+ private $match_type = 0;
+ /**
+ * Optional, CPC bid to set for the keyword. If not set, keyword will use
+ * bid based on bidding strategy used by target ad group.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value cpc_bid_micros = 3;
+ */
+ private $cpc_bid_micros = null;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Services\RecommendationService::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * The ad group resource to add keyword to. This is a required field.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue ad_group = 1;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getAdGroup()
+ {
+ return $this->ad_group;
+ }
+
+ /**
+ * The ad group resource to add keyword to. This is a required field.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue ad_group = 1;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setAdGroup($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->ad_group = $var;
+
+ return $this;
+ }
+
+ /**
+ * The match type of the keyword. This is a required field.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.KeywordMatchTypeEnum.KeywordMatchType match_type = 2;
+ * @return int
+ */
+ public function getMatchType()
+ {
+ return $this->match_type;
+ }
+
+ /**
+ * The match type of the keyword. This is a required field.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.KeywordMatchTypeEnum.KeywordMatchType match_type = 2;
+ * @param int $var
+ * @return $this
+ */
+ public function setMatchType($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Enums\KeywordMatchTypeEnum_KeywordMatchType::class);
+ $this->match_type = $var;
+
+ return $this;
+ }
+
+ /**
+ * Optional, CPC bid to set for the keyword. If not set, keyword will use
+ * bid based on bidding strategy used by target ad group.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value cpc_bid_micros = 3;
+ * @return \Google\Protobuf\Int64Value
+ */
+ public function getCpcBidMicros()
+ {
+ return $this->cpc_bid_micros;
+ }
+
+ /**
+ * Optional, CPC bid to set for the keyword. If not set, keyword will use
+ * bid based on bidding strategy used by target ad group.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value cpc_bid_micros = 3;
+ * @param \Google\Protobuf\Int64Value $var
+ * @return $this
+ */
+ public function setCpcBidMicros($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Int64Value::class);
+ $this->cpc_bid_micros = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Services/ApplyRecommendationOperation_TargetCpaOptInParameters.php b/src/Google/Ads/GoogleAds/V0/Services/ApplyRecommendationOperation_TargetCpaOptInParameters.php
new file mode 100644
index 000000000..c856fbfa6
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/ApplyRecommendationOperation_TargetCpaOptInParameters.php
@@ -0,0 +1,92 @@
+google.ads.googleads.v0.services.ApplyRecommendationOperation.TargetCpaOptInParameters
+ */
+class ApplyRecommendationOperation_TargetCpaOptInParameters extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * Average CPA to use for Target CPA bidding strategy. This is a required
+ * field.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value target_cpa_micros = 1;
+ */
+ private $target_cpa_micros = null;
+ /**
+ * Optional, budget amount to set for the campaign.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value new_campaign_budget_amount_micros = 2;
+ */
+ private $new_campaign_budget_amount_micros = null;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Services\RecommendationService::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * Average CPA to use for Target CPA bidding strategy. This is a required
+ * field.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value target_cpa_micros = 1;
+ * @return \Google\Protobuf\Int64Value
+ */
+ public function getTargetCpaMicros()
+ {
+ return $this->target_cpa_micros;
+ }
+
+ /**
+ * Average CPA to use for Target CPA bidding strategy. This is a required
+ * field.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value target_cpa_micros = 1;
+ * @param \Google\Protobuf\Int64Value $var
+ * @return $this
+ */
+ public function setTargetCpaMicros($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Int64Value::class);
+ $this->target_cpa_micros = $var;
+
+ return $this;
+ }
+
+ /**
+ * Optional, budget amount to set for the campaign.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value new_campaign_budget_amount_micros = 2;
+ * @return \Google\Protobuf\Int64Value
+ */
+ public function getNewCampaignBudgetAmountMicros()
+ {
+ return $this->new_campaign_budget_amount_micros;
+ }
+
+ /**
+ * Optional, budget amount to set for the campaign.
+ *
+ * Generated from protobuf field .google.protobuf.Int64Value new_campaign_budget_amount_micros = 2;
+ * @param \Google\Protobuf\Int64Value $var
+ * @return $this
+ */
+ public function setNewCampaignBudgetAmountMicros($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Int64Value::class);
+ $this->new_campaign_budget_amount_micros = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Services/ApplyRecommendationOperation_TextAdParameters.php b/src/Google/Ads/GoogleAds/V0/Services/ApplyRecommendationOperation_TextAdParameters.php
new file mode 100644
index 000000000..139d91965
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/ApplyRecommendationOperation_TextAdParameters.php
@@ -0,0 +1,60 @@
+google.ads.googleads.v0.services.ApplyRecommendationOperation.TextAdParameters
+ */
+class ApplyRecommendationOperation_TextAdParameters extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * New ad to add to recommended ad group. All necessary fields need to be
+ * set in this message. This is a required field.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.Ad ad = 1;
+ */
+ private $ad = null;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Services\RecommendationService::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * New ad to add to recommended ad group. All necessary fields need to be
+ * set in this message. This is a required field.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.Ad ad = 1;
+ * @return \Google\Ads\GoogleAds\V0\Common\Ad
+ */
+ public function getAd()
+ {
+ return $this->ad;
+ }
+
+ /**
+ * New ad to add to recommended ad group. All necessary fields need to be
+ * set in this message. This is a required field.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.Ad ad = 1;
+ * @param \Google\Ads\GoogleAds\V0\Common\Ad $var
+ * @return $this
+ */
+ public function setAd($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Common\Ad::class);
+ $this->ad = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Services/ApplyRecommendationRequest.php b/src/Google/Ads/GoogleAds/V0/Services/ApplyRecommendationRequest.php
new file mode 100644
index 000000000..ae0a0be03
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/ApplyRecommendationRequest.php
@@ -0,0 +1,89 @@
+google.ads.googleads.v0.services.ApplyRecommendationRequest
+ */
+class ApplyRecommendationRequest extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The ID of the customer with the recommendation.
+ *
+ * Generated from protobuf field string customer_id = 1;
+ */
+ private $customer_id = '';
+ /**
+ * The list of operations to apply recommendations.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.services.ApplyRecommendationOperation operations = 2;
+ */
+ private $operations;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Services\RecommendationService::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * The ID of the customer with the recommendation.
+ *
+ * Generated from protobuf field string customer_id = 1;
+ * @return string
+ */
+ public function getCustomerId()
+ {
+ return $this->customer_id;
+ }
+
+ /**
+ * The ID of the customer with the recommendation.
+ *
+ * Generated from protobuf field string customer_id = 1;
+ * @param string $var
+ * @return $this
+ */
+ public function setCustomerId($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->customer_id = $var;
+
+ return $this;
+ }
+
+ /**
+ * The list of operations to apply recommendations.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.services.ApplyRecommendationOperation operations = 2;
+ * @return \Google\Protobuf\Internal\RepeatedField
+ */
+ public function getOperations()
+ {
+ return $this->operations;
+ }
+
+ /**
+ * The list of operations to apply recommendations.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.services.ApplyRecommendationOperation operations = 2;
+ * @param \Google\Ads\GoogleAds\V0\Services\ApplyRecommendationOperation[]|\Google\Protobuf\Internal\RepeatedField $var
+ * @return $this
+ */
+ public function setOperations($var)
+ {
+ $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Ads\GoogleAds\V0\Services\ApplyRecommendationOperation::class);
+ $this->operations = $arr;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Services/ApplyRecommendationResponse.php b/src/Google/Ads/GoogleAds/V0/Services/ApplyRecommendationResponse.php
new file mode 100644
index 000000000..f8fa53dcd
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/ApplyRecommendationResponse.php
@@ -0,0 +1,57 @@
+google.ads.googleads.v0.services.ApplyRecommendationResponse
+ */
+class ApplyRecommendationResponse extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * Results of operations to apply recommendations.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.services.ApplyRecommendationResult results = 1;
+ */
+ private $results;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Services\RecommendationService::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * Results of operations to apply recommendations.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.services.ApplyRecommendationResult results = 1;
+ * @return \Google\Protobuf\Internal\RepeatedField
+ */
+ public function getResults()
+ {
+ return $this->results;
+ }
+
+ /**
+ * Results of operations to apply recommendations.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.services.ApplyRecommendationResult results = 1;
+ * @param \Google\Ads\GoogleAds\V0\Services\ApplyRecommendationResult[]|\Google\Protobuf\Internal\RepeatedField $var
+ * @return $this
+ */
+ public function setResults($var)
+ {
+ $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Ads\GoogleAds\V0\Services\ApplyRecommendationResult::class);
+ $this->results = $arr;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Services/ApplyRecommendationResult.php b/src/Google/Ads/GoogleAds/V0/Services/ApplyRecommendationResult.php
new file mode 100644
index 000000000..81206ff73
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/ApplyRecommendationResult.php
@@ -0,0 +1,86 @@
+google.ads.googleads.v0.services.ApplyRecommendationResult
+ */
+class ApplyRecommendationResult extends \Google\Protobuf\Internal\Message
+{
+ protected $result;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Services\RecommendationService::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * Returned for successful applies.
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @return string
+ */
+ public function getResourceName()
+ {
+ return $this->readOneof(1);
+ }
+
+ /**
+ * Returned for successful applies.
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @param string $var
+ * @return $this
+ */
+ public function setResourceName($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->writeOneof(1, $var);
+
+ return $this;
+ }
+
+ /**
+ * Returned for failed operations.
+ *
+ * Generated from protobuf field .google.rpc.Status status = 2;
+ * @return \Google\Rpc\Status
+ */
+ public function getStatus()
+ {
+ return $this->readOneof(2);
+ }
+
+ /**
+ * Returned for failed operations.
+ *
+ * Generated from protobuf field .google.rpc.Status status = 2;
+ * @param \Google\Rpc\Status $var
+ * @return $this
+ */
+ public function setStatus($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Rpc\Status::class);
+ $this->writeOneof(2, $var);
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getResult()
+ {
+ return $this->whichOneof("result");
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Services/BiddingStrategyOperation.php b/src/Google/Ads/GoogleAds/V0/Services/BiddingStrategyOperation.php
new file mode 100644
index 000000000..84fc3e575
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/BiddingStrategyOperation.php
@@ -0,0 +1,152 @@
+google.ads.googleads.v0.services.BiddingStrategyOperation
+ */
+class BiddingStrategyOperation extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * FieldMask that determines which resource fields are modified in an update.
+ *
+ * Generated from protobuf field .google.protobuf.FieldMask update_mask = 4;
+ */
+ private $update_mask = null;
+ protected $operation;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Services\BiddingStrategyService::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * FieldMask that determines which resource fields are modified in an update.
+ *
+ * Generated from protobuf field .google.protobuf.FieldMask update_mask = 4;
+ * @return \Google\Protobuf\FieldMask
+ */
+ public function getUpdateMask()
+ {
+ return $this->update_mask;
+ }
+
+ /**
+ * FieldMask that determines which resource fields are modified in an update.
+ *
+ * Generated from protobuf field .google.protobuf.FieldMask update_mask = 4;
+ * @param \Google\Protobuf\FieldMask $var
+ * @return $this
+ */
+ public function setUpdateMask($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\FieldMask::class);
+ $this->update_mask = $var;
+
+ return $this;
+ }
+
+ /**
+ * Create operation: No resource name is expected for the new bidding
+ * strategy.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.BiddingStrategy create = 1;
+ * @return \Google\Ads\GoogleAds\V0\Resources\BiddingStrategy
+ */
+ public function getCreate()
+ {
+ return $this->readOneof(1);
+ }
+
+ /**
+ * Create operation: No resource name is expected for the new bidding
+ * strategy.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.BiddingStrategy create = 1;
+ * @param \Google\Ads\GoogleAds\V0\Resources\BiddingStrategy $var
+ * @return $this
+ */
+ public function setCreate($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Resources\BiddingStrategy::class);
+ $this->writeOneof(1, $var);
+
+ return $this;
+ }
+
+ /**
+ * Update operation: The bidding strategy is expected to have a valid
+ * resource name.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.BiddingStrategy update = 2;
+ * @return \Google\Ads\GoogleAds\V0\Resources\BiddingStrategy
+ */
+ public function getUpdate()
+ {
+ return $this->readOneof(2);
+ }
+
+ /**
+ * Update operation: The bidding strategy is expected to have a valid
+ * resource name.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.BiddingStrategy update = 2;
+ * @param \Google\Ads\GoogleAds\V0\Resources\BiddingStrategy $var
+ * @return $this
+ */
+ public function setUpdate($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Resources\BiddingStrategy::class);
+ $this->writeOneof(2, $var);
+
+ return $this;
+ }
+
+ /**
+ * Remove operation: A resource name for the removed bidding strategy is
+ * expected, in this format:
+ * `customers/{customer_id}/biddingStrategies/{bidding_strategy_id}`
+ *
+ * Generated from protobuf field string remove = 3;
+ * @return string
+ */
+ public function getRemove()
+ {
+ return $this->readOneof(3);
+ }
+
+ /**
+ * Remove operation: A resource name for the removed bidding strategy is
+ * expected, in this format:
+ * `customers/{customer_id}/biddingStrategies/{bidding_strategy_id}`
+ *
+ * Generated from protobuf field string remove = 3;
+ * @param string $var
+ * @return $this
+ */
+ public function setRemove($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->writeOneof(3, $var);
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getOperation()
+ {
+ return $this->whichOneof("operation");
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Services/BiddingStrategyServiceClient.php b/src/Google/Ads/GoogleAds/V0/Services/BiddingStrategyServiceClient.php
new file mode 100644
index 000000000..957eda03b
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/BiddingStrategyServiceClient.php
@@ -0,0 +1,42 @@
+_simpleRequest('/google.ads.googleads.v0.services.BiddingStrategyService/GetBiddingStrategy',
+ $argument,
+ ['\Google\Ads\GoogleAds\V0\Resources\BiddingStrategy', 'decode'],
+ $metadata, $options);
+ }
+
+ /**
+ * Creates, updates, or removes bidding strategies. Operation statuses are
+ * returned.
+ * @param \Google\Ads\GoogleAds\V0\Services\MutateBiddingStrategiesRequest $argument input argument
+ * @param array $metadata metadata
+ * @param array $options call options
+ */
+ public function MutateBiddingStrategies(\Google\Ads\GoogleAds\V0\Services\MutateBiddingStrategiesRequest $argument,
+ $metadata = [], $options = []) {
+ return $this->_simpleRequest('/google.ads.googleads.v0.services.BiddingStrategyService/MutateBiddingStrategies',
+ $argument,
+ ['\Google\Ads\GoogleAds\V0\Services\MutateBiddingStrategiesResponse', 'decode'],
+ $metadata, $options);
+ }
+
+}
diff --git a/src/Google/Ads/GoogleAds/V0/Services/CampaignBudgetOperation.php b/src/Google/Ads/GoogleAds/V0/Services/CampaignBudgetOperation.php
new file mode 100644
index 000000000..ef1090c1e
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/CampaignBudgetOperation.php
@@ -0,0 +1,150 @@
+google.ads.googleads.v0.services.CampaignBudgetOperation
+ */
+class CampaignBudgetOperation extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * FieldMask that determines which resource fields are modified in an update.
+ *
+ * Generated from protobuf field .google.protobuf.FieldMask update_mask = 4;
+ */
+ private $update_mask = null;
+ protected $operation;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Services\CampaignBudgetService::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * FieldMask that determines which resource fields are modified in an update.
+ *
+ * Generated from protobuf field .google.protobuf.FieldMask update_mask = 4;
+ * @return \Google\Protobuf\FieldMask
+ */
+ public function getUpdateMask()
+ {
+ return $this->update_mask;
+ }
+
+ /**
+ * FieldMask that determines which resource fields are modified in an update.
+ *
+ * Generated from protobuf field .google.protobuf.FieldMask update_mask = 4;
+ * @param \Google\Protobuf\FieldMask $var
+ * @return $this
+ */
+ public function setUpdateMask($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\FieldMask::class);
+ $this->update_mask = $var;
+
+ return $this;
+ }
+
+ /**
+ * Create operation: No resource name is expected for the new budget.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.CampaignBudget create = 1;
+ * @return \Google\Ads\GoogleAds\V0\Resources\CampaignBudget
+ */
+ public function getCreate()
+ {
+ return $this->readOneof(1);
+ }
+
+ /**
+ * Create operation: No resource name is expected for the new budget.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.CampaignBudget create = 1;
+ * @param \Google\Ads\GoogleAds\V0\Resources\CampaignBudget $var
+ * @return $this
+ */
+ public function setCreate($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Resources\CampaignBudget::class);
+ $this->writeOneof(1, $var);
+
+ return $this;
+ }
+
+ /**
+ * Update operation: The campaign budget is expected to have a valid
+ * resource name.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.CampaignBudget update = 2;
+ * @return \Google\Ads\GoogleAds\V0\Resources\CampaignBudget
+ */
+ public function getUpdate()
+ {
+ return $this->readOneof(2);
+ }
+
+ /**
+ * Update operation: The campaign budget is expected to have a valid
+ * resource name.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.CampaignBudget update = 2;
+ * @param \Google\Ads\GoogleAds\V0\Resources\CampaignBudget $var
+ * @return $this
+ */
+ public function setUpdate($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Resources\CampaignBudget::class);
+ $this->writeOneof(2, $var);
+
+ return $this;
+ }
+
+ /**
+ * Remove operation: A resource name for the removed budget is expected, in
+ * this format:
+ * `customers/{customer_id}/campaignBudgets/{budget_id}`
+ *
+ * Generated from protobuf field string remove = 3;
+ * @return string
+ */
+ public function getRemove()
+ {
+ return $this->readOneof(3);
+ }
+
+ /**
+ * Remove operation: A resource name for the removed budget is expected, in
+ * this format:
+ * `customers/{customer_id}/campaignBudgets/{budget_id}`
+ *
+ * Generated from protobuf field string remove = 3;
+ * @param string $var
+ * @return $this
+ */
+ public function setRemove($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->writeOneof(3, $var);
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getOperation()
+ {
+ return $this->whichOneof("operation");
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Services/CampaignBudgetServiceClient.php b/src/Google/Ads/GoogleAds/V0/Services/CampaignBudgetServiceClient.php
new file mode 100644
index 000000000..976efbb49
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/CampaignBudgetServiceClient.php
@@ -0,0 +1,42 @@
+_simpleRequest('/google.ads.googleads.v0.services.CampaignBudgetService/GetCampaignBudget',
+ $argument,
+ ['\Google\Ads\GoogleAds\V0\Resources\CampaignBudget', 'decode'],
+ $metadata, $options);
+ }
+
+ /**
+ * Creates, updates, or removes campaign budgets. Operation statuses are
+ * returned.
+ * @param \Google\Ads\GoogleAds\V0\Services\MutateCampaignBudgetsRequest $argument input argument
+ * @param array $metadata metadata
+ * @param array $options call options
+ */
+ public function MutateCampaignBudgets(\Google\Ads\GoogleAds\V0\Services\MutateCampaignBudgetsRequest $argument,
+ $metadata = [], $options = []) {
+ return $this->_simpleRequest('/google.ads.googleads.v0.services.CampaignBudgetService/MutateCampaignBudgets',
+ $argument,
+ ['\Google\Ads\GoogleAds\V0\Services\MutateCampaignBudgetsResponse', 'decode'],
+ $metadata, $options);
+ }
+
+}
diff --git a/src/Google/Ads/GoogleAds/V0/Services/CampaignCriterionOperation.php b/src/Google/Ads/GoogleAds/V0/Services/CampaignCriterionOperation.php
new file mode 100644
index 000000000..18eb62630
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/CampaignCriterionOperation.php
@@ -0,0 +1,150 @@
+google.ads.googleads.v0.services.CampaignCriterionOperation
+ */
+class CampaignCriterionOperation extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * FieldMask that determines which resource fields are modified in an update.
+ *
+ * Generated from protobuf field .google.protobuf.FieldMask update_mask = 4;
+ */
+ private $update_mask = null;
+ protected $operation;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Services\CampaignCriterionService::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * FieldMask that determines which resource fields are modified in an update.
+ *
+ * Generated from protobuf field .google.protobuf.FieldMask update_mask = 4;
+ * @return \Google\Protobuf\FieldMask
+ */
+ public function getUpdateMask()
+ {
+ return $this->update_mask;
+ }
+
+ /**
+ * FieldMask that determines which resource fields are modified in an update.
+ *
+ * Generated from protobuf field .google.protobuf.FieldMask update_mask = 4;
+ * @param \Google\Protobuf\FieldMask $var
+ * @return $this
+ */
+ public function setUpdateMask($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\FieldMask::class);
+ $this->update_mask = $var;
+
+ return $this;
+ }
+
+ /**
+ * Create operation: No resource name is expected for the new criterion.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.CampaignCriterion create = 1;
+ * @return \Google\Ads\GoogleAds\V0\Resources\CampaignCriterion
+ */
+ public function getCreate()
+ {
+ return $this->readOneof(1);
+ }
+
+ /**
+ * Create operation: No resource name is expected for the new criterion.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.CampaignCriterion create = 1;
+ * @param \Google\Ads\GoogleAds\V0\Resources\CampaignCriterion $var
+ * @return $this
+ */
+ public function setCreate($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Resources\CampaignCriterion::class);
+ $this->writeOneof(1, $var);
+
+ return $this;
+ }
+
+ /**
+ * Update operation: The criterion is expected to have a valid resource
+ * name.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.CampaignCriterion update = 2;
+ * @return \Google\Ads\GoogleAds\V0\Resources\CampaignCriterion
+ */
+ public function getUpdate()
+ {
+ return $this->readOneof(2);
+ }
+
+ /**
+ * Update operation: The criterion is expected to have a valid resource
+ * name.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.CampaignCriterion update = 2;
+ * @param \Google\Ads\GoogleAds\V0\Resources\CampaignCriterion $var
+ * @return $this
+ */
+ public function setUpdate($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Resources\CampaignCriterion::class);
+ $this->writeOneof(2, $var);
+
+ return $this;
+ }
+
+ /**
+ * Remove operation: A resource name for the removed criterion is expected,
+ * in this format:
+ * `customers/{customer_id}/campaignCriteria/{campaign_id}_{criterion_id}`
+ *
+ * Generated from protobuf field string remove = 3;
+ * @return string
+ */
+ public function getRemove()
+ {
+ return $this->readOneof(3);
+ }
+
+ /**
+ * Remove operation: A resource name for the removed criterion is expected,
+ * in this format:
+ * `customers/{customer_id}/campaignCriteria/{campaign_id}_{criterion_id}`
+ *
+ * Generated from protobuf field string remove = 3;
+ * @param string $var
+ * @return $this
+ */
+ public function setRemove($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->writeOneof(3, $var);
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getOperation()
+ {
+ return $this->whichOneof("operation");
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Services/CampaignCriterionServiceClient.php b/src/Google/Ads/GoogleAds/V0/Services/CampaignCriterionServiceClient.php
new file mode 100644
index 000000000..94054f205
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/CampaignCriterionServiceClient.php
@@ -0,0 +1,42 @@
+_simpleRequest('/google.ads.googleads.v0.services.CampaignCriterionService/GetCampaignCriterion',
+ $argument,
+ ['\Google\Ads\GoogleAds\V0\Resources\CampaignCriterion', 'decode'],
+ $metadata, $options);
+ }
+
+ /**
+ * Creates, updates, or removes criteria. Operation statuses are returned.
+ * @param \Google\Ads\GoogleAds\V0\Services\MutateCampaignCriteriaRequest $argument input argument
+ * @param array $metadata metadata
+ * @param array $options call options
+ */
+ public function MutateCampaignCriteria(\Google\Ads\GoogleAds\V0\Services\MutateCampaignCriteriaRequest $argument,
+ $metadata = [], $options = []) {
+ return $this->_simpleRequest('/google.ads.googleads.v0.services.CampaignCriterionService/MutateCampaignCriteria',
+ $argument,
+ ['\Google\Ads\GoogleAds\V0\Services\MutateCampaignCriteriaResponse', 'decode'],
+ $metadata, $options);
+ }
+
+}
diff --git a/src/Google/Ads/GoogleAds/V0/Services/CampaignOperation.php b/src/Google/Ads/GoogleAds/V0/Services/CampaignOperation.php
new file mode 100644
index 000000000..6922b1a5f
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/CampaignOperation.php
@@ -0,0 +1,150 @@
+google.ads.googleads.v0.services.CampaignOperation
+ */
+class CampaignOperation extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * FieldMask that determines which resource fields are modified in an update.
+ *
+ * Generated from protobuf field .google.protobuf.FieldMask update_mask = 4;
+ */
+ private $update_mask = null;
+ protected $operation;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Services\CampaignService::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * FieldMask that determines which resource fields are modified in an update.
+ *
+ * Generated from protobuf field .google.protobuf.FieldMask update_mask = 4;
+ * @return \Google\Protobuf\FieldMask
+ */
+ public function getUpdateMask()
+ {
+ return $this->update_mask;
+ }
+
+ /**
+ * FieldMask that determines which resource fields are modified in an update.
+ *
+ * Generated from protobuf field .google.protobuf.FieldMask update_mask = 4;
+ * @param \Google\Protobuf\FieldMask $var
+ * @return $this
+ */
+ public function setUpdateMask($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\FieldMask::class);
+ $this->update_mask = $var;
+
+ return $this;
+ }
+
+ /**
+ * Create operation: No resource name is expected for the new campaign.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.Campaign create = 1;
+ * @return \Google\Ads\GoogleAds\V0\Resources\Campaign
+ */
+ public function getCreate()
+ {
+ return $this->readOneof(1);
+ }
+
+ /**
+ * Create operation: No resource name is expected for the new campaign.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.Campaign create = 1;
+ * @param \Google\Ads\GoogleAds\V0\Resources\Campaign $var
+ * @return $this
+ */
+ public function setCreate($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Resources\Campaign::class);
+ $this->writeOneof(1, $var);
+
+ return $this;
+ }
+
+ /**
+ * Update operation: The campaign is expected to have a valid
+ * resource name.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.Campaign update = 2;
+ * @return \Google\Ads\GoogleAds\V0\Resources\Campaign
+ */
+ public function getUpdate()
+ {
+ return $this->readOneof(2);
+ }
+
+ /**
+ * Update operation: The campaign is expected to have a valid
+ * resource name.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.Campaign update = 2;
+ * @param \Google\Ads\GoogleAds\V0\Resources\Campaign $var
+ * @return $this
+ */
+ public function setUpdate($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Resources\Campaign::class);
+ $this->writeOneof(2, $var);
+
+ return $this;
+ }
+
+ /**
+ * Remove operation: A resource name for the removed campaign is
+ * expected, in this format:
+ * `customers/{customer_id}/campaigns/{campaign_id}`
+ *
+ * Generated from protobuf field string remove = 3;
+ * @return string
+ */
+ public function getRemove()
+ {
+ return $this->readOneof(3);
+ }
+
+ /**
+ * Remove operation: A resource name for the removed campaign is
+ * expected, in this format:
+ * `customers/{customer_id}/campaigns/{campaign_id}`
+ *
+ * Generated from protobuf field string remove = 3;
+ * @param string $var
+ * @return $this
+ */
+ public function setRemove($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->writeOneof(3, $var);
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getOperation()
+ {
+ return $this->whichOneof("operation");
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Services/CampaignServiceClient.php b/src/Google/Ads/GoogleAds/V0/Services/CampaignServiceClient.php
new file mode 100644
index 000000000..b28b163d4
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/CampaignServiceClient.php
@@ -0,0 +1,42 @@
+_simpleRequest('/google.ads.googleads.v0.services.CampaignService/GetCampaign',
+ $argument,
+ ['\Google\Ads\GoogleAds\V0\Resources\Campaign', 'decode'],
+ $metadata, $options);
+ }
+
+ /**
+ * Creates, updates, or removes campaigns. Operation statuses are returned.
+ * @param \Google\Ads\GoogleAds\V0\Services\MutateCampaignsRequest $argument input argument
+ * @param array $metadata metadata
+ * @param array $options call options
+ */
+ public function MutateCampaigns(\Google\Ads\GoogleAds\V0\Services\MutateCampaignsRequest $argument,
+ $metadata = [], $options = []) {
+ return $this->_simpleRequest('/google.ads.googleads.v0.services.CampaignService/MutateCampaigns',
+ $argument,
+ ['\Google\Ads\GoogleAds\V0\Services\MutateCampaignsResponse', 'decode'],
+ $metadata, $options);
+ }
+
+}
diff --git a/src/Google/Ads/GoogleAds/V0/Services/CustomerServiceClient.php b/src/Google/Ads/GoogleAds/V0/Services/CustomerServiceClient.php
new file mode 100644
index 000000000..9755c0695
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/CustomerServiceClient.php
@@ -0,0 +1,42 @@
+_simpleRequest('/google.ads.googleads.v0.services.CustomerService/GetCustomer',
+ $argument,
+ ['\Google\Ads\GoogleAds\V0\Resources\Customer', 'decode'],
+ $metadata, $options);
+ }
+
+}
diff --git a/src/Google/Ads/GoogleAds/V0/Services/Gapic/AdGroupAdServiceGapicClient.php b/src/Google/Ads/GoogleAds/V0/Services/Gapic/AdGroupAdServiceGapicClient.php
new file mode 100644
index 000000000..7f36610b3
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/Gapic/AdGroupAdServiceGapicClient.php
@@ -0,0 +1,350 @@
+adGroupAdName('[CUSTOMER]', '[AD_GROUP_AD]');
+ * $response = $adGroupAdServiceClient->getAdGroupAd($formattedResourceName);
+ * } finally {
+ * $adGroupAdServiceClient->close();
+ * }
+ * ```
+ *
+ * Many parameters require resource names to be formatted in a particular way. To assist
+ * with these names, this class includes a format method for each type of name, and additionally
+ * a parseName method to extract the individual identifiers contained within formatted names
+ * that are returned by the API.
+ *
+ * @experimental
+ */
+class AdGroupAdServiceGapicClient
+{
+ use GapicClientTrait;
+
+ /**
+ * The name of the service.
+ */
+ const SERVICE_NAME = 'google.ads.googleads.v0.services.AdGroupAdService';
+
+ /**
+ * The default address of the service.
+ */
+ const SERVICE_ADDRESS = 'googleads.googleapis.com';
+
+ /**
+ * The default port of the service.
+ */
+ const DEFAULT_SERVICE_PORT = 443;
+
+ /**
+ * The name of the code generator, to be included in the agent header.
+ */
+ const CODEGEN_NAME = 'gapic';
+
+ /**
+ * The default scopes required by the service.
+ */
+ public static $serviceScopes = [
+ ];
+ private static $adGroupAdNameTemplate;
+ private static $pathTemplateMap;
+
+ private static function getClientDefaults()
+ {
+ return [
+ 'serviceName' => self::SERVICE_NAME,
+ 'serviceAddress' => self::SERVICE_ADDRESS.':'.self::DEFAULT_SERVICE_PORT,
+ 'clientConfig' => __DIR__.'/../resources/ad_group_ad_service_client_config.json',
+ 'descriptorsConfigPath' => __DIR__.'/../resources/ad_group_ad_service_descriptor_config.php',
+ 'credentialsConfig' => [
+ 'scopes' => self::$serviceScopes,
+ ],
+ 'transportConfig' => [
+ 'rest' => [
+ 'restClientConfigPath' => __DIR__.'/../resources/ad_group_ad_service_rest_client_config.php',
+ ],
+ ],
+ 'versionFile' => __DIR__.'/../../../VERSION',
+ ];
+ }
+
+ private static function getAdGroupAdNameTemplate()
+ {
+ if (self::$adGroupAdNameTemplate == null) {
+ self::$adGroupAdNameTemplate = new PathTemplate('customers/{customer}/adGroupAds/{ad_group_ad}');
+ }
+
+ return self::$adGroupAdNameTemplate;
+ }
+
+ private static function getPathTemplateMap()
+ {
+ if (self::$pathTemplateMap == null) {
+ self::$pathTemplateMap = [
+ 'adGroupAd' => self::getAdGroupAdNameTemplate(),
+ ];
+ }
+
+ return self::$pathTemplateMap;
+ }
+
+ /**
+ * Formats a string containing the fully-qualified path to represent
+ * a ad_group_ad resource.
+ *
+ * @param string $customer
+ * @param string $adGroupAd
+ *
+ * @return string The formatted ad_group_ad resource.
+ * @experimental
+ */
+ public static function adGroupAdName($customer, $adGroupAd)
+ {
+ return self::getAdGroupAdNameTemplate()->render([
+ 'customer' => $customer,
+ 'ad_group_ad' => $adGroupAd,
+ ]);
+ }
+
+ /**
+ * Parses a formatted name string and returns an associative array of the components in the name.
+ * The following name formats are supported:
+ * Template: Pattern
+ * - adGroupAd: customers/{customer}/adGroupAds/{ad_group_ad}.
+ *
+ * The optional $template argument can be supplied to specify a particular pattern, and must
+ * match one of the templates listed above. If no $template argument is provided, or if the
+ * $template argument does not match one of the templates listed, then parseName will check
+ * each of the supported templates, and return the first match.
+ *
+ * @param string $formattedName The formatted name string
+ * @param string $template Optional name of template to match
+ *
+ * @return array An associative array from name component IDs to component values.
+ *
+ * @throws ValidationException If $formattedName could not be matched.
+ * @experimental
+ */
+ public static function parseName($formattedName, $template = null)
+ {
+ $templateMap = self::getPathTemplateMap();
+
+ if ($template) {
+ if (!isset($templateMap[$template])) {
+ throw new ValidationException("Template name $template does not exist");
+ }
+
+ return $templateMap[$template]->match($formattedName);
+ }
+
+ foreach ($templateMap as $templateName => $pathTemplate) {
+ try {
+ return $pathTemplate->match($formattedName);
+ } catch (ValidationException $ex) {
+ // Swallow the exception to continue trying other path templates
+ }
+ }
+ throw new ValidationException("Input did not match any known format. Input: $formattedName");
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param array $options {
+ * Optional. Options for configuring the service API wrapper.
+ *
+ * @type string $serviceAddress
+ * The address of the API remote host. May optionally include the port, formatted
+ * as "string resource_name = 1;
+ */
+ private $resource_name = '';
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Services\AdGroupAdService::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * The resource name of the ad to fetch.
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @return string
+ */
+ public function getResourceName()
+ {
+ return $this->resource_name;
+ }
+
+ /**
+ * The resource name of the ad to fetch.
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @param string $var
+ * @return $this
+ */
+ public function setResourceName($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->resource_name = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Services/GetAdGroupBidModifierRequest.php b/src/Google/Ads/GoogleAds/V0/Services/GetAdGroupBidModifierRequest.php
new file mode 100644
index 000000000..c20989831
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/GetAdGroupBidModifierRequest.php
@@ -0,0 +1,57 @@
+google.ads.googleads.v0.services.GetAdGroupBidModifierRequest
+ */
+class GetAdGroupBidModifierRequest extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The resource name of the ad group bid modifier to fetch.
+ *
+ * Generated from protobuf field string resource_name = 1;
+ */
+ private $resource_name = '';
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Services\AdGroupBidModifierService::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * The resource name of the ad group bid modifier to fetch.
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @return string
+ */
+ public function getResourceName()
+ {
+ return $this->resource_name;
+ }
+
+ /**
+ * The resource name of the ad group bid modifier to fetch.
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @param string $var
+ * @return $this
+ */
+ public function setResourceName($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->resource_name = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Services/GetAdGroupCriterionRequest.php b/src/Google/Ads/GoogleAds/V0/Services/GetAdGroupCriterionRequest.php
new file mode 100644
index 000000000..6f1e808ca
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/GetAdGroupCriterionRequest.php
@@ -0,0 +1,57 @@
+google.ads.googleads.v0.services.GetAdGroupCriterionRequest
+ */
+class GetAdGroupCriterionRequest extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The resource name of the criterion to fetch.
+ *
+ * Generated from protobuf field string resource_name = 1;
+ */
+ private $resource_name = '';
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Services\AdGroupCriterionService::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * The resource name of the criterion to fetch.
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @return string
+ */
+ public function getResourceName()
+ {
+ return $this->resource_name;
+ }
+
+ /**
+ * The resource name of the criterion to fetch.
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @param string $var
+ * @return $this
+ */
+ public function setResourceName($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->resource_name = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Services/GetAdGroupRequest.php b/src/Google/Ads/GoogleAds/V0/Services/GetAdGroupRequest.php
new file mode 100644
index 000000000..c65d23bb6
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/GetAdGroupRequest.php
@@ -0,0 +1,57 @@
+google.ads.googleads.v0.services.GetAdGroupRequest
+ */
+class GetAdGroupRequest extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The resource name of the ad group to fetch.
+ *
+ * Generated from protobuf field string resource_name = 1;
+ */
+ private $resource_name = '';
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Services\AdGroupService::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * The resource name of the ad group to fetch.
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @return string
+ */
+ public function getResourceName()
+ {
+ return $this->resource_name;
+ }
+
+ /**
+ * The resource name of the ad group to fetch.
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @param string $var
+ * @return $this
+ */
+ public function setResourceName($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->resource_name = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Services/GetBiddingStrategyRequest.php b/src/Google/Ads/GoogleAds/V0/Services/GetBiddingStrategyRequest.php
new file mode 100644
index 000000000..26b0c061e
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/GetBiddingStrategyRequest.php
@@ -0,0 +1,57 @@
+google.ads.googleads.v0.services.GetBiddingStrategyRequest
+ */
+class GetBiddingStrategyRequest extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The resource name of the bidding strategy to fetch.
+ *
+ * Generated from protobuf field string resource_name = 1;
+ */
+ private $resource_name = '';
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Services\BiddingStrategyService::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * The resource name of the bidding strategy to fetch.
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @return string
+ */
+ public function getResourceName()
+ {
+ return $this->resource_name;
+ }
+
+ /**
+ * The resource name of the bidding strategy to fetch.
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @param string $var
+ * @return $this
+ */
+ public function setResourceName($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->resource_name = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Services/GetCampaignBudgetRequest.php b/src/Google/Ads/GoogleAds/V0/Services/GetCampaignBudgetRequest.php
new file mode 100644
index 000000000..d817b76f1
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/GetCampaignBudgetRequest.php
@@ -0,0 +1,57 @@
+google.ads.googleads.v0.services.GetCampaignBudgetRequest
+ */
+class GetCampaignBudgetRequest extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The resource name of the campaign budget to fetch.
+ *
+ * Generated from protobuf field string resource_name = 1;
+ */
+ private $resource_name = '';
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Services\CampaignBudgetService::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * The resource name of the campaign budget to fetch.
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @return string
+ */
+ public function getResourceName()
+ {
+ return $this->resource_name;
+ }
+
+ /**
+ * The resource name of the campaign budget to fetch.
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @param string $var
+ * @return $this
+ */
+ public function setResourceName($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->resource_name = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Services/GetCampaignCriterionRequest.php b/src/Google/Ads/GoogleAds/V0/Services/GetCampaignCriterionRequest.php
new file mode 100644
index 000000000..4178702de
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/GetCampaignCriterionRequest.php
@@ -0,0 +1,57 @@
+google.ads.googleads.v0.services.GetCampaignCriterionRequest
+ */
+class GetCampaignCriterionRequest extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The resource name of the criterion to fetch.
+ *
+ * Generated from protobuf field string resource_name = 1;
+ */
+ private $resource_name = '';
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Services\CampaignCriterionService::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * The resource name of the criterion to fetch.
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @return string
+ */
+ public function getResourceName()
+ {
+ return $this->resource_name;
+ }
+
+ /**
+ * The resource name of the criterion to fetch.
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @param string $var
+ * @return $this
+ */
+ public function setResourceName($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->resource_name = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Services/GetCampaignRequest.php b/src/Google/Ads/GoogleAds/V0/Services/GetCampaignRequest.php
new file mode 100644
index 000000000..224870169
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/GetCampaignRequest.php
@@ -0,0 +1,57 @@
+google.ads.googleads.v0.services.GetCampaignRequest
+ */
+class GetCampaignRequest extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The resource name of the campaign to fetch.
+ *
+ * Generated from protobuf field string resource_name = 1;
+ */
+ private $resource_name = '';
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Services\CampaignService::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * The resource name of the campaign to fetch.
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @return string
+ */
+ public function getResourceName()
+ {
+ return $this->resource_name;
+ }
+
+ /**
+ * The resource name of the campaign to fetch.
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @param string $var
+ * @return $this
+ */
+ public function setResourceName($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->resource_name = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Services/GetCustomerRequest.php b/src/Google/Ads/GoogleAds/V0/Services/GetCustomerRequest.php
new file mode 100644
index 000000000..f080582bb
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/GetCustomerRequest.php
@@ -0,0 +1,57 @@
+google.ads.googleads.v0.services.GetCustomerRequest
+ */
+class GetCustomerRequest extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The resource name of the customer to fetch.
+ *
+ * Generated from protobuf field string resource_name = 1;
+ */
+ private $resource_name = '';
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Services\CustomerService::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * The resource name of the customer to fetch.
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @return string
+ */
+ public function getResourceName()
+ {
+ return $this->resource_name;
+ }
+
+ /**
+ * The resource name of the customer to fetch.
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @param string $var
+ * @return $this
+ */
+ public function setResourceName($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->resource_name = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Services/GetGeoTargetConstantRequest.php b/src/Google/Ads/GoogleAds/V0/Services/GetGeoTargetConstantRequest.php
new file mode 100644
index 000000000..3f7ed6a69
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/GetGeoTargetConstantRequest.php
@@ -0,0 +1,57 @@
+google.ads.googleads.v0.services.GetGeoTargetConstantRequest
+ */
+class GetGeoTargetConstantRequest extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The resource name of the geo target constant to fetch.
+ *
+ * Generated from protobuf field string resource_name = 1;
+ */
+ private $resource_name = '';
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Services\GeoTargetConstantService::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * The resource name of the geo target constant to fetch.
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @return string
+ */
+ public function getResourceName()
+ {
+ return $this->resource_name;
+ }
+
+ /**
+ * The resource name of the geo target constant to fetch.
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @param string $var
+ * @return $this
+ */
+ public function setResourceName($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->resource_name = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Services/GetGoogleAdsFieldRequest.php b/src/Google/Ads/GoogleAds/V0/Services/GetGoogleAdsFieldRequest.php
new file mode 100644
index 000000000..6d654925f
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/GetGoogleAdsFieldRequest.php
@@ -0,0 +1,57 @@
+google.ads.googleads.v0.services.GetGoogleAdsFieldRequest
+ */
+class GetGoogleAdsFieldRequest extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The resource name of the field to get.
+ *
+ * Generated from protobuf field string resource_name = 1;
+ */
+ private $resource_name = '';
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Services\GoogleAdsFieldService::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * The resource name of the field to get.
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @return string
+ */
+ public function getResourceName()
+ {
+ return $this->resource_name;
+ }
+
+ /**
+ * The resource name of the field to get.
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @param string $var
+ * @return $this
+ */
+ public function setResourceName($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->resource_name = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Services/GetKeywordViewRequest.php b/src/Google/Ads/GoogleAds/V0/Services/GetKeywordViewRequest.php
new file mode 100644
index 000000000..cc12bdd60
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/GetKeywordViewRequest.php
@@ -0,0 +1,57 @@
+google.ads.googleads.v0.services.GetKeywordViewRequest
+ */
+class GetKeywordViewRequest extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The resource name of the keyword view to fetch.
+ *
+ * Generated from protobuf field string resource_name = 1;
+ */
+ private $resource_name = '';
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Services\KeywordViewService::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * The resource name of the keyword view to fetch.
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @return string
+ */
+ public function getResourceName()
+ {
+ return $this->resource_name;
+ }
+
+ /**
+ * The resource name of the keyword view to fetch.
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @param string $var
+ * @return $this
+ */
+ public function setResourceName($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->resource_name = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Services/GetRecommendationRequest.php b/src/Google/Ads/GoogleAds/V0/Services/GetRecommendationRequest.php
new file mode 100644
index 000000000..947b289b4
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/GetRecommendationRequest.php
@@ -0,0 +1,57 @@
+google.ads.googleads.v0.services.GetRecommendationRequest
+ */
+class GetRecommendationRequest extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The resource name of the recommendation to fetch.
+ *
+ * Generated from protobuf field string resource_name = 1;
+ */
+ private $resource_name = '';
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Services\RecommendationService::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * The resource name of the recommendation to fetch.
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @return string
+ */
+ public function getResourceName()
+ {
+ return $this->resource_name;
+ }
+
+ /**
+ * The resource name of the recommendation to fetch.
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @param string $var
+ * @return $this
+ */
+ public function setResourceName($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->resource_name = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Services/GoogleAdsFieldServiceClient.php b/src/Google/Ads/GoogleAds/V0/Services/GoogleAdsFieldServiceClient.php
new file mode 100644
index 000000000..f520fc2fc
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/GoogleAdsFieldServiceClient.php
@@ -0,0 +1,42 @@
+_simpleRequest('/google.ads.googleads.v0.services.GoogleAdsFieldService/GetGoogleAdsField',
+ $argument,
+ ['\Google\Ads\GoogleAds\V0\Resources\GoogleAdsField', 'decode'],
+ $metadata, $options);
+ }
+
+ /**
+ * Returns all fields that match the search query.
+ * @param \Google\Ads\GoogleAds\V0\Services\SearchGoogleAdsFieldsRequest $argument input argument
+ * @param array $metadata metadata
+ * @param array $options call options
+ */
+ public function SearchGoogleAdsFields(\Google\Ads\GoogleAds\V0\Services\SearchGoogleAdsFieldsRequest $argument,
+ $metadata = [], $options = []) {
+ return $this->_simpleRequest('/google.ads.googleads.v0.services.GoogleAdsFieldService/SearchGoogleAdsFields',
+ $argument,
+ ['\Google\Ads\GoogleAds\V0\Services\SearchGoogleAdsFieldsResponse', 'decode'],
+ $metadata, $options);
+ }
+
+}
diff --git a/src/Google/Ads/GoogleAds/V0/Services/GoogleAdsRow.php b/src/Google/Ads/GoogleAds/V0/Services/GoogleAdsRow.php
new file mode 100644
index 000000000..80261edd7
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/GoogleAdsRow.php
@@ -0,0 +1,773 @@
+google.ads.googleads.v0.services.GoogleAdsRow
+ */
+class GoogleAdsRow extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The ad group referenced in the query.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.AdGroup ad_group = 3;
+ */
+ private $ad_group = null;
+ /**
+ * The ad referenced in the query.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.AdGroupAd ad_group_ad = 16;
+ */
+ private $ad_group_ad = null;
+ /**
+ * The bid modifier referenced in the query.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.AdGroupBidModifier ad_group_bid_modifier = 24;
+ */
+ private $ad_group_bid_modifier = null;
+ /**
+ * The criterion referenced in the query.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.AdGroupCriterion ad_group_criterion = 17;
+ */
+ private $ad_group_criterion = null;
+ /**
+ * The bidding strategy referenced in the query.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.BiddingStrategy bidding_strategy = 18;
+ */
+ private $bidding_strategy = null;
+ /**
+ * The campaign budget referenced in the query.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.CampaignBudget campaign_budget = 19;
+ */
+ private $campaign_budget = null;
+ /**
+ * The campaign referenced in the query.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.Campaign campaign = 2;
+ */
+ private $campaign = null;
+ /**
+ * The campaign criterion referenced in the query.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.CampaignCriterion campaign_criterion = 20;
+ */
+ private $campaign_criterion = null;
+ /**
+ * The customer referenced in the query.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.Customer customer = 1;
+ */
+ private $customer = null;
+ /**
+ * The geo target constant referenced in the query.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.GeoTargetConstant geo_target_constant = 23;
+ */
+ private $geo_target_constant = null;
+ /**
+ * The keyword view referenced in the query.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.KeywordView keyword_view = 21;
+ */
+ private $keyword_view = null;
+ /**
+ * The recommendation referenced in the query.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.Recommendation recommendation = 22;
+ */
+ private $recommendation = null;
+ /**
+ * The metrics.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.Metrics metrics = 4;
+ */
+ private $metrics = null;
+ /**
+ * Ad network type.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.AdNetworkTypeEnum.AdNetworkType ad_network_type = 5;
+ */
+ private $ad_network_type = 0;
+ /**
+ * Date to which metrics apply.
+ * YYYY-MM-DD format, e.g., 2018-04-17.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue date = 6;
+ */
+ private $date = null;
+ /**
+ * Day of the week, e.g., MONDAY.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.DayOfWeekEnum.DayOfWeek day_of_week = 7;
+ */
+ private $day_of_week = 0;
+ /**
+ * Platform to which metrics apply.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.DeviceEnum.Device device = 8;
+ */
+ private $device = 0;
+ /**
+ * Hour of day as a number between 0 and 23, inclusive.
+ *
+ * Generated from protobuf field .google.protobuf.Int32Value hour = 9;
+ */
+ private $hour = null;
+ /**
+ * Month as represented by the date of the first day of a month.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue month = 10;
+ */
+ private $month = null;
+ /**
+ * Quarter as represented by the date of the first day of a quarter.
+ * Uses the calendar year for quarters,
+ * e.g., the second quarter of 2018 starts on 2018-04-01.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue quarter = 12;
+ */
+ private $quarter = null;
+ /**
+ * Position of the ad.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.SlotEnum.Slot slot = 13;
+ */
+ private $slot = 0;
+ /**
+ * Week as defined as Monday through Sunday, and represented by the date of
+ * Monday.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue week = 14;
+ */
+ private $week = null;
+ /**
+ * Year, formatted as yyyy.
+ *
+ * Generated from protobuf field .google.protobuf.Int32Value year = 15;
+ */
+ private $year = null;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Services\GoogleAdsService::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * The ad group referenced in the query.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.AdGroup ad_group = 3;
+ * @return \Google\Ads\GoogleAds\V0\Resources\AdGroup
+ */
+ public function getAdGroup()
+ {
+ return $this->ad_group;
+ }
+
+ /**
+ * The ad group referenced in the query.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.AdGroup ad_group = 3;
+ * @param \Google\Ads\GoogleAds\V0\Resources\AdGroup $var
+ * @return $this
+ */
+ public function setAdGroup($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Resources\AdGroup::class);
+ $this->ad_group = $var;
+
+ return $this;
+ }
+
+ /**
+ * The ad referenced in the query.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.AdGroupAd ad_group_ad = 16;
+ * @return \Google\Ads\GoogleAds\V0\Resources\AdGroupAd
+ */
+ public function getAdGroupAd()
+ {
+ return $this->ad_group_ad;
+ }
+
+ /**
+ * The ad referenced in the query.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.AdGroupAd ad_group_ad = 16;
+ * @param \Google\Ads\GoogleAds\V0\Resources\AdGroupAd $var
+ * @return $this
+ */
+ public function setAdGroupAd($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Resources\AdGroupAd::class);
+ $this->ad_group_ad = $var;
+
+ return $this;
+ }
+
+ /**
+ * The bid modifier referenced in the query.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.AdGroupBidModifier ad_group_bid_modifier = 24;
+ * @return \Google\Ads\GoogleAds\V0\Resources\AdGroupBidModifier
+ */
+ public function getAdGroupBidModifier()
+ {
+ return $this->ad_group_bid_modifier;
+ }
+
+ /**
+ * The bid modifier referenced in the query.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.AdGroupBidModifier ad_group_bid_modifier = 24;
+ * @param \Google\Ads\GoogleAds\V0\Resources\AdGroupBidModifier $var
+ * @return $this
+ */
+ public function setAdGroupBidModifier($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Resources\AdGroupBidModifier::class);
+ $this->ad_group_bid_modifier = $var;
+
+ return $this;
+ }
+
+ /**
+ * The criterion referenced in the query.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.AdGroupCriterion ad_group_criterion = 17;
+ * @return \Google\Ads\GoogleAds\V0\Resources\AdGroupCriterion
+ */
+ public function getAdGroupCriterion()
+ {
+ return $this->ad_group_criterion;
+ }
+
+ /**
+ * The criterion referenced in the query.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.AdGroupCriterion ad_group_criterion = 17;
+ * @param \Google\Ads\GoogleAds\V0\Resources\AdGroupCriterion $var
+ * @return $this
+ */
+ public function setAdGroupCriterion($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Resources\AdGroupCriterion::class);
+ $this->ad_group_criterion = $var;
+
+ return $this;
+ }
+
+ /**
+ * The bidding strategy referenced in the query.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.BiddingStrategy bidding_strategy = 18;
+ * @return \Google\Ads\GoogleAds\V0\Resources\BiddingStrategy
+ */
+ public function getBiddingStrategy()
+ {
+ return $this->bidding_strategy;
+ }
+
+ /**
+ * The bidding strategy referenced in the query.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.BiddingStrategy bidding_strategy = 18;
+ * @param \Google\Ads\GoogleAds\V0\Resources\BiddingStrategy $var
+ * @return $this
+ */
+ public function setBiddingStrategy($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Resources\BiddingStrategy::class);
+ $this->bidding_strategy = $var;
+
+ return $this;
+ }
+
+ /**
+ * The campaign budget referenced in the query.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.CampaignBudget campaign_budget = 19;
+ * @return \Google\Ads\GoogleAds\V0\Resources\CampaignBudget
+ */
+ public function getCampaignBudget()
+ {
+ return $this->campaign_budget;
+ }
+
+ /**
+ * The campaign budget referenced in the query.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.CampaignBudget campaign_budget = 19;
+ * @param \Google\Ads\GoogleAds\V0\Resources\CampaignBudget $var
+ * @return $this
+ */
+ public function setCampaignBudget($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Resources\CampaignBudget::class);
+ $this->campaign_budget = $var;
+
+ return $this;
+ }
+
+ /**
+ * The campaign referenced in the query.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.Campaign campaign = 2;
+ * @return \Google\Ads\GoogleAds\V0\Resources\Campaign
+ */
+ public function getCampaign()
+ {
+ return $this->campaign;
+ }
+
+ /**
+ * The campaign referenced in the query.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.Campaign campaign = 2;
+ * @param \Google\Ads\GoogleAds\V0\Resources\Campaign $var
+ * @return $this
+ */
+ public function setCampaign($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Resources\Campaign::class);
+ $this->campaign = $var;
+
+ return $this;
+ }
+
+ /**
+ * The campaign criterion referenced in the query.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.CampaignCriterion campaign_criterion = 20;
+ * @return \Google\Ads\GoogleAds\V0\Resources\CampaignCriterion
+ */
+ public function getCampaignCriterion()
+ {
+ return $this->campaign_criterion;
+ }
+
+ /**
+ * The campaign criterion referenced in the query.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.CampaignCriterion campaign_criterion = 20;
+ * @param \Google\Ads\GoogleAds\V0\Resources\CampaignCriterion $var
+ * @return $this
+ */
+ public function setCampaignCriterion($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Resources\CampaignCriterion::class);
+ $this->campaign_criterion = $var;
+
+ return $this;
+ }
+
+ /**
+ * The customer referenced in the query.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.Customer customer = 1;
+ * @return \Google\Ads\GoogleAds\V0\Resources\Customer
+ */
+ public function getCustomer()
+ {
+ return $this->customer;
+ }
+
+ /**
+ * The customer referenced in the query.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.Customer customer = 1;
+ * @param \Google\Ads\GoogleAds\V0\Resources\Customer $var
+ * @return $this
+ */
+ public function setCustomer($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Resources\Customer::class);
+ $this->customer = $var;
+
+ return $this;
+ }
+
+ /**
+ * The geo target constant referenced in the query.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.GeoTargetConstant geo_target_constant = 23;
+ * @return \Google\Ads\GoogleAds\V0\Resources\GeoTargetConstant
+ */
+ public function getGeoTargetConstant()
+ {
+ return $this->geo_target_constant;
+ }
+
+ /**
+ * The geo target constant referenced in the query.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.GeoTargetConstant geo_target_constant = 23;
+ * @param \Google\Ads\GoogleAds\V0\Resources\GeoTargetConstant $var
+ * @return $this
+ */
+ public function setGeoTargetConstant($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Resources\GeoTargetConstant::class);
+ $this->geo_target_constant = $var;
+
+ return $this;
+ }
+
+ /**
+ * The keyword view referenced in the query.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.KeywordView keyword_view = 21;
+ * @return \Google\Ads\GoogleAds\V0\Resources\KeywordView
+ */
+ public function getKeywordView()
+ {
+ return $this->keyword_view;
+ }
+
+ /**
+ * The keyword view referenced in the query.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.KeywordView keyword_view = 21;
+ * @param \Google\Ads\GoogleAds\V0\Resources\KeywordView $var
+ * @return $this
+ */
+ public function setKeywordView($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Resources\KeywordView::class);
+ $this->keyword_view = $var;
+
+ return $this;
+ }
+
+ /**
+ * The recommendation referenced in the query.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.Recommendation recommendation = 22;
+ * @return \Google\Ads\GoogleAds\V0\Resources\Recommendation
+ */
+ public function getRecommendation()
+ {
+ return $this->recommendation;
+ }
+
+ /**
+ * The recommendation referenced in the query.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.resources.Recommendation recommendation = 22;
+ * @param \Google\Ads\GoogleAds\V0\Resources\Recommendation $var
+ * @return $this
+ */
+ public function setRecommendation($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Resources\Recommendation::class);
+ $this->recommendation = $var;
+
+ return $this;
+ }
+
+ /**
+ * The metrics.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.Metrics metrics = 4;
+ * @return \Google\Ads\GoogleAds\V0\Common\Metrics
+ */
+ public function getMetrics()
+ {
+ return $this->metrics;
+ }
+
+ /**
+ * The metrics.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.common.Metrics metrics = 4;
+ * @param \Google\Ads\GoogleAds\V0\Common\Metrics $var
+ * @return $this
+ */
+ public function setMetrics($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V0\Common\Metrics::class);
+ $this->metrics = $var;
+
+ return $this;
+ }
+
+ /**
+ * Ad network type.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.AdNetworkTypeEnum.AdNetworkType ad_network_type = 5;
+ * @return int
+ */
+ public function getAdNetworkType()
+ {
+ return $this->ad_network_type;
+ }
+
+ /**
+ * Ad network type.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.AdNetworkTypeEnum.AdNetworkType ad_network_type = 5;
+ * @param int $var
+ * @return $this
+ */
+ public function setAdNetworkType($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Enums\AdNetworkTypeEnum_AdNetworkType::class);
+ $this->ad_network_type = $var;
+
+ return $this;
+ }
+
+ /**
+ * Date to which metrics apply.
+ * YYYY-MM-DD format, e.g., 2018-04-17.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue date = 6;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getDate()
+ {
+ return $this->date;
+ }
+
+ /**
+ * Date to which metrics apply.
+ * YYYY-MM-DD format, e.g., 2018-04-17.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue date = 6;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setDate($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->date = $var;
+
+ return $this;
+ }
+
+ /**
+ * Day of the week, e.g., MONDAY.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.DayOfWeekEnum.DayOfWeek day_of_week = 7;
+ * @return int
+ */
+ public function getDayOfWeek()
+ {
+ return $this->day_of_week;
+ }
+
+ /**
+ * Day of the week, e.g., MONDAY.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.DayOfWeekEnum.DayOfWeek day_of_week = 7;
+ * @param int $var
+ * @return $this
+ */
+ public function setDayOfWeek($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Enums\DayOfWeekEnum_DayOfWeek::class);
+ $this->day_of_week = $var;
+
+ return $this;
+ }
+
+ /**
+ * Platform to which metrics apply.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.DeviceEnum.Device device = 8;
+ * @return int
+ */
+ public function getDevice()
+ {
+ return $this->device;
+ }
+
+ /**
+ * Platform to which metrics apply.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.DeviceEnum.Device device = 8;
+ * @param int $var
+ * @return $this
+ */
+ public function setDevice($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Enums\DeviceEnum_Device::class);
+ $this->device = $var;
+
+ return $this;
+ }
+
+ /**
+ * Hour of day as a number between 0 and 23, inclusive.
+ *
+ * Generated from protobuf field .google.protobuf.Int32Value hour = 9;
+ * @return \Google\Protobuf\Int32Value
+ */
+ public function getHour()
+ {
+ return $this->hour;
+ }
+
+ /**
+ * Hour of day as a number between 0 and 23, inclusive.
+ *
+ * Generated from protobuf field .google.protobuf.Int32Value hour = 9;
+ * @param \Google\Protobuf\Int32Value $var
+ * @return $this
+ */
+ public function setHour($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Int32Value::class);
+ $this->hour = $var;
+
+ return $this;
+ }
+
+ /**
+ * Month as represented by the date of the first day of a month.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue month = 10;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getMonth()
+ {
+ return $this->month;
+ }
+
+ /**
+ * Month as represented by the date of the first day of a month.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue month = 10;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setMonth($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->month = $var;
+
+ return $this;
+ }
+
+ /**
+ * Quarter as represented by the date of the first day of a quarter.
+ * Uses the calendar year for quarters,
+ * e.g., the second quarter of 2018 starts on 2018-04-01.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue quarter = 12;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getQuarter()
+ {
+ return $this->quarter;
+ }
+
+ /**
+ * Quarter as represented by the date of the first day of a quarter.
+ * Uses the calendar year for quarters,
+ * e.g., the second quarter of 2018 starts on 2018-04-01.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue quarter = 12;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setQuarter($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->quarter = $var;
+
+ return $this;
+ }
+
+ /**
+ * Position of the ad.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.SlotEnum.Slot slot = 13;
+ * @return int
+ */
+ public function getSlot()
+ {
+ return $this->slot;
+ }
+
+ /**
+ * Position of the ad.
+ *
+ * Generated from protobuf field .google.ads.googleads.v0.enums.SlotEnum.Slot slot = 13;
+ * @param int $var
+ * @return $this
+ */
+ public function setSlot($var)
+ {
+ GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V0\Enums\SlotEnum_Slot::class);
+ $this->slot = $var;
+
+ return $this;
+ }
+
+ /**
+ * Week as defined as Monday through Sunday, and represented by the date of
+ * Monday.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue week = 14;
+ * @return \Google\Protobuf\StringValue
+ */
+ public function getWeek()
+ {
+ return $this->week;
+ }
+
+ /**
+ * Week as defined as Monday through Sunday, and represented by the date of
+ * Monday.
+ *
+ * Generated from protobuf field .google.protobuf.StringValue week = 14;
+ * @param \Google\Protobuf\StringValue $var
+ * @return $this
+ */
+ public function setWeek($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\StringValue::class);
+ $this->week = $var;
+
+ return $this;
+ }
+
+ /**
+ * Year, formatted as yyyy.
+ *
+ * Generated from protobuf field .google.protobuf.Int32Value year = 15;
+ * @return \Google\Protobuf\Int32Value
+ */
+ public function getYear()
+ {
+ return $this->year;
+ }
+
+ /**
+ * Year, formatted as yyyy.
+ *
+ * Generated from protobuf field .google.protobuf.Int32Value year = 15;
+ * @param \Google\Protobuf\Int32Value $var
+ * @return $this
+ */
+ public function setYear($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Int32Value::class);
+ $this->year = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Services/GoogleAdsServiceClient.php b/src/Google/Ads/GoogleAds/V0/Services/GoogleAdsServiceClient.php
new file mode 100644
index 000000000..a74cd5de9
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/GoogleAdsServiceClient.php
@@ -0,0 +1,42 @@
+_simpleRequest('/google.ads.googleads.v0.services.GoogleAdsService/Search',
+ $argument,
+ ['\Google\Ads\GoogleAds\V0\Services\SearchGoogleAdsResponse', 'decode'],
+ $metadata, $options);
+ }
+
+}
diff --git a/src/Google/Ads/GoogleAds/V0/Services/KeywordViewServiceClient.php b/src/Google/Ads/GoogleAds/V0/Services/KeywordViewServiceClient.php
new file mode 100644
index 000000000..ae75857c3
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/KeywordViewServiceClient.php
@@ -0,0 +1,42 @@
+_simpleRequest('/google.ads.googleads.v0.services.KeywordViewService/GetKeywordView',
+ $argument,
+ ['\Google\Ads\GoogleAds\V0\Resources\KeywordView', 'decode'],
+ $metadata, $options);
+ }
+
+}
diff --git a/src/Google/Ads/GoogleAds/V0/Services/MutateAdGroupAdResult.php b/src/Google/Ads/GoogleAds/V0/Services/MutateAdGroupAdResult.php
new file mode 100644
index 000000000..fafd80bdc
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/MutateAdGroupAdResult.php
@@ -0,0 +1,57 @@
+google.ads.googleads.v0.services.MutateAdGroupAdResult
+ */
+class MutateAdGroupAdResult extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The resource name returned for successful operations.
+ *
+ * Generated from protobuf field string resource_name = 1;
+ */
+ private $resource_name = '';
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Services\AdGroupAdService::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * The resource name returned for successful operations.
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @return string
+ */
+ public function getResourceName()
+ {
+ return $this->resource_name;
+ }
+
+ /**
+ * The resource name returned for successful operations.
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @param string $var
+ * @return $this
+ */
+ public function setResourceName($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->resource_name = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Services/MutateAdGroupAdsRequest.php b/src/Google/Ads/GoogleAds/V0/Services/MutateAdGroupAdsRequest.php
new file mode 100644
index 000000000..c2268ee67
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/MutateAdGroupAdsRequest.php
@@ -0,0 +1,89 @@
+google.ads.googleads.v0.services.MutateAdGroupAdsRequest
+ */
+class MutateAdGroupAdsRequest extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The ID of the customer whose ads are being modified.
+ *
+ * Generated from protobuf field string customer_id = 1;
+ */
+ private $customer_id = '';
+ /**
+ * The list of operations to perform on individual ads.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.services.AdGroupAdOperation operations = 2;
+ */
+ private $operations;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Services\AdGroupAdService::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * The ID of the customer whose ads are being modified.
+ *
+ * Generated from protobuf field string customer_id = 1;
+ * @return string
+ */
+ public function getCustomerId()
+ {
+ return $this->customer_id;
+ }
+
+ /**
+ * The ID of the customer whose ads are being modified.
+ *
+ * Generated from protobuf field string customer_id = 1;
+ * @param string $var
+ * @return $this
+ */
+ public function setCustomerId($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->customer_id = $var;
+
+ return $this;
+ }
+
+ /**
+ * The list of operations to perform on individual ads.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.services.AdGroupAdOperation operations = 2;
+ * @return \Google\Protobuf\Internal\RepeatedField
+ */
+ public function getOperations()
+ {
+ return $this->operations;
+ }
+
+ /**
+ * The list of operations to perform on individual ads.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.services.AdGroupAdOperation operations = 2;
+ * @param \Google\Ads\GoogleAds\V0\Services\AdGroupAdOperation[]|\Google\Protobuf\Internal\RepeatedField $var
+ * @return $this
+ */
+ public function setOperations($var)
+ {
+ $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Ads\GoogleAds\V0\Services\AdGroupAdOperation::class);
+ $this->operations = $arr;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Services/MutateAdGroupAdsResponse.php b/src/Google/Ads/GoogleAds/V0/Services/MutateAdGroupAdsResponse.php
new file mode 100644
index 000000000..0f4a8c46e
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/MutateAdGroupAdsResponse.php
@@ -0,0 +1,57 @@
+google.ads.googleads.v0.services.MutateAdGroupAdsResponse
+ */
+class MutateAdGroupAdsResponse extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * All results for the mutate.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.services.MutateAdGroupAdResult results = 2;
+ */
+ private $results;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Services\AdGroupAdService::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * All results for the mutate.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.services.MutateAdGroupAdResult results = 2;
+ * @return \Google\Protobuf\Internal\RepeatedField
+ */
+ public function getResults()
+ {
+ return $this->results;
+ }
+
+ /**
+ * All results for the mutate.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.services.MutateAdGroupAdResult results = 2;
+ * @param \Google\Ads\GoogleAds\V0\Services\MutateAdGroupAdResult[]|\Google\Protobuf\Internal\RepeatedField $var
+ * @return $this
+ */
+ public function setResults($var)
+ {
+ $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Ads\GoogleAds\V0\Services\MutateAdGroupAdResult::class);
+ $this->results = $arr;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Services/MutateAdGroupBidModifierResult.php b/src/Google/Ads/GoogleAds/V0/Services/MutateAdGroupBidModifierResult.php
new file mode 100644
index 000000000..98f0b14b6
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/MutateAdGroupBidModifierResult.php
@@ -0,0 +1,57 @@
+google.ads.googleads.v0.services.MutateAdGroupBidModifierResult
+ */
+class MutateAdGroupBidModifierResult extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * Returned for successful operations.
+ *
+ * Generated from protobuf field string resource_name = 1;
+ */
+ private $resource_name = '';
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Services\AdGroupBidModifierService::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * Returned for successful operations.
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @return string
+ */
+ public function getResourceName()
+ {
+ return $this->resource_name;
+ }
+
+ /**
+ * Returned for successful operations.
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @param string $var
+ * @return $this
+ */
+ public function setResourceName($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->resource_name = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Services/MutateAdGroupBidModifiersRequest.php b/src/Google/Ads/GoogleAds/V0/Services/MutateAdGroupBidModifiersRequest.php
new file mode 100644
index 000000000..062321093
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/MutateAdGroupBidModifiersRequest.php
@@ -0,0 +1,89 @@
+google.ads.googleads.v0.services.MutateAdGroupBidModifiersRequest
+ */
+class MutateAdGroupBidModifiersRequest extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * ID of the customer whose ad group bid modifiers are being modified.
+ *
+ * Generated from protobuf field string customer_id = 1;
+ */
+ private $customer_id = '';
+ /**
+ * The list of operations to perform on individual ad group bid modifiers.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.services.AdGroupBidModifierOperation operations = 2;
+ */
+ private $operations;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Services\AdGroupBidModifierService::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * ID of the customer whose ad group bid modifiers are being modified.
+ *
+ * Generated from protobuf field string customer_id = 1;
+ * @return string
+ */
+ public function getCustomerId()
+ {
+ return $this->customer_id;
+ }
+
+ /**
+ * ID of the customer whose ad group bid modifiers are being modified.
+ *
+ * Generated from protobuf field string customer_id = 1;
+ * @param string $var
+ * @return $this
+ */
+ public function setCustomerId($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->customer_id = $var;
+
+ return $this;
+ }
+
+ /**
+ * The list of operations to perform on individual ad group bid modifiers.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.services.AdGroupBidModifierOperation operations = 2;
+ * @return \Google\Protobuf\Internal\RepeatedField
+ */
+ public function getOperations()
+ {
+ return $this->operations;
+ }
+
+ /**
+ * The list of operations to perform on individual ad group bid modifiers.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.services.AdGroupBidModifierOperation operations = 2;
+ * @param \Google\Ads\GoogleAds\V0\Services\AdGroupBidModifierOperation[]|\Google\Protobuf\Internal\RepeatedField $var
+ * @return $this
+ */
+ public function setOperations($var)
+ {
+ $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Ads\GoogleAds\V0\Services\AdGroupBidModifierOperation::class);
+ $this->operations = $arr;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Services/MutateAdGroupBidModifiersResponse.php b/src/Google/Ads/GoogleAds/V0/Services/MutateAdGroupBidModifiersResponse.php
new file mode 100644
index 000000000..016d039e4
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/MutateAdGroupBidModifiersResponse.php
@@ -0,0 +1,57 @@
+google.ads.googleads.v0.services.MutateAdGroupBidModifiersResponse
+ */
+class MutateAdGroupBidModifiersResponse extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * All results for the mutate.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.services.MutateAdGroupBidModifierResult results = 2;
+ */
+ private $results;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Services\AdGroupBidModifierService::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * All results for the mutate.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.services.MutateAdGroupBidModifierResult results = 2;
+ * @return \Google\Protobuf\Internal\RepeatedField
+ */
+ public function getResults()
+ {
+ return $this->results;
+ }
+
+ /**
+ * All results for the mutate.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.services.MutateAdGroupBidModifierResult results = 2;
+ * @param \Google\Ads\GoogleAds\V0\Services\MutateAdGroupBidModifierResult[]|\Google\Protobuf\Internal\RepeatedField $var
+ * @return $this
+ */
+ public function setResults($var)
+ {
+ $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Ads\GoogleAds\V0\Services\MutateAdGroupBidModifierResult::class);
+ $this->results = $arr;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Services/MutateAdGroupCriteriaRequest.php b/src/Google/Ads/GoogleAds/V0/Services/MutateAdGroupCriteriaRequest.php
new file mode 100644
index 000000000..36b744ca2
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/MutateAdGroupCriteriaRequest.php
@@ -0,0 +1,89 @@
+google.ads.googleads.v0.services.MutateAdGroupCriteriaRequest
+ */
+class MutateAdGroupCriteriaRequest extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * ID of the customer whose criteria are being modified.
+ *
+ * Generated from protobuf field string customer_id = 1;
+ */
+ private $customer_id = '';
+ /**
+ * The list of operations to perform on individual criteria.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.services.AdGroupCriterionOperation operations = 2;
+ */
+ private $operations;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Services\AdGroupCriterionService::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * ID of the customer whose criteria are being modified.
+ *
+ * Generated from protobuf field string customer_id = 1;
+ * @return string
+ */
+ public function getCustomerId()
+ {
+ return $this->customer_id;
+ }
+
+ /**
+ * ID of the customer whose criteria are being modified.
+ *
+ * Generated from protobuf field string customer_id = 1;
+ * @param string $var
+ * @return $this
+ */
+ public function setCustomerId($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->customer_id = $var;
+
+ return $this;
+ }
+
+ /**
+ * The list of operations to perform on individual criteria.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.services.AdGroupCriterionOperation operations = 2;
+ * @return \Google\Protobuf\Internal\RepeatedField
+ */
+ public function getOperations()
+ {
+ return $this->operations;
+ }
+
+ /**
+ * The list of operations to perform on individual criteria.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.services.AdGroupCriterionOperation operations = 2;
+ * @param \Google\Ads\GoogleAds\V0\Services\AdGroupCriterionOperation[]|\Google\Protobuf\Internal\RepeatedField $var
+ * @return $this
+ */
+ public function setOperations($var)
+ {
+ $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Ads\GoogleAds\V0\Services\AdGroupCriterionOperation::class);
+ $this->operations = $arr;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Services/MutateAdGroupCriteriaResponse.php b/src/Google/Ads/GoogleAds/V0/Services/MutateAdGroupCriteriaResponse.php
new file mode 100644
index 000000000..ce7587d6e
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/MutateAdGroupCriteriaResponse.php
@@ -0,0 +1,57 @@
+google.ads.googleads.v0.services.MutateAdGroupCriteriaResponse
+ */
+class MutateAdGroupCriteriaResponse extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * All results for the mutate.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.services.MutateAdGroupCriterionResult results = 2;
+ */
+ private $results;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Services\AdGroupCriterionService::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * All results for the mutate.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.services.MutateAdGroupCriterionResult results = 2;
+ * @return \Google\Protobuf\Internal\RepeatedField
+ */
+ public function getResults()
+ {
+ return $this->results;
+ }
+
+ /**
+ * All results for the mutate.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.services.MutateAdGroupCriterionResult results = 2;
+ * @param \Google\Ads\GoogleAds\V0\Services\MutateAdGroupCriterionResult[]|\Google\Protobuf\Internal\RepeatedField $var
+ * @return $this
+ */
+ public function setResults($var)
+ {
+ $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Ads\GoogleAds\V0\Services\MutateAdGroupCriterionResult::class);
+ $this->results = $arr;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Services/MutateAdGroupCriterionResult.php b/src/Google/Ads/GoogleAds/V0/Services/MutateAdGroupCriterionResult.php
new file mode 100644
index 000000000..1c3da6be8
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/MutateAdGroupCriterionResult.php
@@ -0,0 +1,57 @@
+google.ads.googleads.v0.services.MutateAdGroupCriterionResult
+ */
+class MutateAdGroupCriterionResult extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * Returned for successful operations.
+ *
+ * Generated from protobuf field string resource_name = 1;
+ */
+ private $resource_name = '';
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Services\AdGroupCriterionService::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * Returned for successful operations.
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @return string
+ */
+ public function getResourceName()
+ {
+ return $this->resource_name;
+ }
+
+ /**
+ * Returned for successful operations.
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @param string $var
+ * @return $this
+ */
+ public function setResourceName($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->resource_name = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Services/MutateAdGroupResult.php b/src/Google/Ads/GoogleAds/V0/Services/MutateAdGroupResult.php
new file mode 100644
index 000000000..7dc06f6aa
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/MutateAdGroupResult.php
@@ -0,0 +1,57 @@
+google.ads.googleads.v0.services.MutateAdGroupResult
+ */
+class MutateAdGroupResult extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * Returned for successful operations.
+ *
+ * Generated from protobuf field string resource_name = 1;
+ */
+ private $resource_name = '';
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Services\AdGroupService::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * Returned for successful operations.
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @return string
+ */
+ public function getResourceName()
+ {
+ return $this->resource_name;
+ }
+
+ /**
+ * Returned for successful operations.
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @param string $var
+ * @return $this
+ */
+ public function setResourceName($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->resource_name = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Services/MutateAdGroupsRequest.php b/src/Google/Ads/GoogleAds/V0/Services/MutateAdGroupsRequest.php
new file mode 100644
index 000000000..c83a952e7
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/MutateAdGroupsRequest.php
@@ -0,0 +1,89 @@
+google.ads.googleads.v0.services.MutateAdGroupsRequest
+ */
+class MutateAdGroupsRequest extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The ID of the customer whose ad groups are being modified.
+ *
+ * Generated from protobuf field string customer_id = 1;
+ */
+ private $customer_id = '';
+ /**
+ * The list of operations to perform on individual ad groups.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.services.AdGroupOperation operations = 2;
+ */
+ private $operations;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Services\AdGroupService::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * The ID of the customer whose ad groups are being modified.
+ *
+ * Generated from protobuf field string customer_id = 1;
+ * @return string
+ */
+ public function getCustomerId()
+ {
+ return $this->customer_id;
+ }
+
+ /**
+ * The ID of the customer whose ad groups are being modified.
+ *
+ * Generated from protobuf field string customer_id = 1;
+ * @param string $var
+ * @return $this
+ */
+ public function setCustomerId($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->customer_id = $var;
+
+ return $this;
+ }
+
+ /**
+ * The list of operations to perform on individual ad groups.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.services.AdGroupOperation operations = 2;
+ * @return \Google\Protobuf\Internal\RepeatedField
+ */
+ public function getOperations()
+ {
+ return $this->operations;
+ }
+
+ /**
+ * The list of operations to perform on individual ad groups.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.services.AdGroupOperation operations = 2;
+ * @param \Google\Ads\GoogleAds\V0\Services\AdGroupOperation[]|\Google\Protobuf\Internal\RepeatedField $var
+ * @return $this
+ */
+ public function setOperations($var)
+ {
+ $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Ads\GoogleAds\V0\Services\AdGroupOperation::class);
+ $this->operations = $arr;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Services/MutateAdGroupsResponse.php b/src/Google/Ads/GoogleAds/V0/Services/MutateAdGroupsResponse.php
new file mode 100644
index 000000000..052191665
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/MutateAdGroupsResponse.php
@@ -0,0 +1,57 @@
+google.ads.googleads.v0.services.MutateAdGroupsResponse
+ */
+class MutateAdGroupsResponse extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * All results for the mutate.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.services.MutateAdGroupResult results = 2;
+ */
+ private $results;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Services\AdGroupService::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * All results for the mutate.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.services.MutateAdGroupResult results = 2;
+ * @return \Google\Protobuf\Internal\RepeatedField
+ */
+ public function getResults()
+ {
+ return $this->results;
+ }
+
+ /**
+ * All results for the mutate.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.services.MutateAdGroupResult results = 2;
+ * @param \Google\Ads\GoogleAds\V0\Services\MutateAdGroupResult[]|\Google\Protobuf\Internal\RepeatedField $var
+ * @return $this
+ */
+ public function setResults($var)
+ {
+ $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Ads\GoogleAds\V0\Services\MutateAdGroupResult::class);
+ $this->results = $arr;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Services/MutateBiddingStrategiesRequest.php b/src/Google/Ads/GoogleAds/V0/Services/MutateBiddingStrategiesRequest.php
new file mode 100644
index 000000000..b10f1fa05
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/MutateBiddingStrategiesRequest.php
@@ -0,0 +1,89 @@
+google.ads.googleads.v0.services.MutateBiddingStrategiesRequest
+ */
+class MutateBiddingStrategiesRequest extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The ID of the customer whose bidding strategies are being modified.
+ *
+ * Generated from protobuf field string customer_id = 1;
+ */
+ private $customer_id = '';
+ /**
+ * The list of operations to perform on individual bidding strategies.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.services.BiddingStrategyOperation operations = 2;
+ */
+ private $operations;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Services\BiddingStrategyService::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * The ID of the customer whose bidding strategies are being modified.
+ *
+ * Generated from protobuf field string customer_id = 1;
+ * @return string
+ */
+ public function getCustomerId()
+ {
+ return $this->customer_id;
+ }
+
+ /**
+ * The ID of the customer whose bidding strategies are being modified.
+ *
+ * Generated from protobuf field string customer_id = 1;
+ * @param string $var
+ * @return $this
+ */
+ public function setCustomerId($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->customer_id = $var;
+
+ return $this;
+ }
+
+ /**
+ * The list of operations to perform on individual bidding strategies.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.services.BiddingStrategyOperation operations = 2;
+ * @return \Google\Protobuf\Internal\RepeatedField
+ */
+ public function getOperations()
+ {
+ return $this->operations;
+ }
+
+ /**
+ * The list of operations to perform on individual bidding strategies.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.services.BiddingStrategyOperation operations = 2;
+ * @param \Google\Ads\GoogleAds\V0\Services\BiddingStrategyOperation[]|\Google\Protobuf\Internal\RepeatedField $var
+ * @return $this
+ */
+ public function setOperations($var)
+ {
+ $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Ads\GoogleAds\V0\Services\BiddingStrategyOperation::class);
+ $this->operations = $arr;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Services/MutateBiddingStrategiesResponse.php b/src/Google/Ads/GoogleAds/V0/Services/MutateBiddingStrategiesResponse.php
new file mode 100644
index 000000000..631f501f9
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/MutateBiddingStrategiesResponse.php
@@ -0,0 +1,57 @@
+google.ads.googleads.v0.services.MutateBiddingStrategiesResponse
+ */
+class MutateBiddingStrategiesResponse extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * All results for the mutate.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.services.MutateBiddingStrategyResult results = 2;
+ */
+ private $results;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Services\BiddingStrategyService::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * All results for the mutate.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.services.MutateBiddingStrategyResult results = 2;
+ * @return \Google\Protobuf\Internal\RepeatedField
+ */
+ public function getResults()
+ {
+ return $this->results;
+ }
+
+ /**
+ * All results for the mutate.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.services.MutateBiddingStrategyResult results = 2;
+ * @param \Google\Ads\GoogleAds\V0\Services\MutateBiddingStrategyResult[]|\Google\Protobuf\Internal\RepeatedField $var
+ * @return $this
+ */
+ public function setResults($var)
+ {
+ $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Ads\GoogleAds\V0\Services\MutateBiddingStrategyResult::class);
+ $this->results = $arr;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Services/MutateBiddingStrategyResult.php b/src/Google/Ads/GoogleAds/V0/Services/MutateBiddingStrategyResult.php
new file mode 100644
index 000000000..ac28b1ecc
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/MutateBiddingStrategyResult.php
@@ -0,0 +1,57 @@
+google.ads.googleads.v0.services.MutateBiddingStrategyResult
+ */
+class MutateBiddingStrategyResult extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * Returned for successful operations.
+ *
+ * Generated from protobuf field string resource_name = 1;
+ */
+ private $resource_name = '';
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Services\BiddingStrategyService::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * Returned for successful operations.
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @return string
+ */
+ public function getResourceName()
+ {
+ return $this->resource_name;
+ }
+
+ /**
+ * Returned for successful operations.
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @param string $var
+ * @return $this
+ */
+ public function setResourceName($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->resource_name = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Services/MutateCampaignBudgetResult.php b/src/Google/Ads/GoogleAds/V0/Services/MutateCampaignBudgetResult.php
new file mode 100644
index 000000000..455186d41
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/MutateCampaignBudgetResult.php
@@ -0,0 +1,57 @@
+google.ads.googleads.v0.services.MutateCampaignBudgetResult
+ */
+class MutateCampaignBudgetResult extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * Returned for successful operations.
+ *
+ * Generated from protobuf field string resource_name = 1;
+ */
+ private $resource_name = '';
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Services\CampaignBudgetService::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * Returned for successful operations.
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @return string
+ */
+ public function getResourceName()
+ {
+ return $this->resource_name;
+ }
+
+ /**
+ * Returned for successful operations.
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @param string $var
+ * @return $this
+ */
+ public function setResourceName($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->resource_name = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Services/MutateCampaignBudgetsRequest.php b/src/Google/Ads/GoogleAds/V0/Services/MutateCampaignBudgetsRequest.php
new file mode 100644
index 000000000..278895ab5
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/MutateCampaignBudgetsRequest.php
@@ -0,0 +1,89 @@
+google.ads.googleads.v0.services.MutateCampaignBudgetsRequest
+ */
+class MutateCampaignBudgetsRequest extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The ID of the customer whose campaign budgets are being modified.
+ *
+ * Generated from protobuf field string customer_id = 1;
+ */
+ private $customer_id = '';
+ /**
+ * The list of operations to perform on individual campaign budgets.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.services.CampaignBudgetOperation operations = 2;
+ */
+ private $operations;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Services\CampaignBudgetService::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * The ID of the customer whose campaign budgets are being modified.
+ *
+ * Generated from protobuf field string customer_id = 1;
+ * @return string
+ */
+ public function getCustomerId()
+ {
+ return $this->customer_id;
+ }
+
+ /**
+ * The ID of the customer whose campaign budgets are being modified.
+ *
+ * Generated from protobuf field string customer_id = 1;
+ * @param string $var
+ * @return $this
+ */
+ public function setCustomerId($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->customer_id = $var;
+
+ return $this;
+ }
+
+ /**
+ * The list of operations to perform on individual campaign budgets.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.services.CampaignBudgetOperation operations = 2;
+ * @return \Google\Protobuf\Internal\RepeatedField
+ */
+ public function getOperations()
+ {
+ return $this->operations;
+ }
+
+ /**
+ * The list of operations to perform on individual campaign budgets.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.services.CampaignBudgetOperation operations = 2;
+ * @param \Google\Ads\GoogleAds\V0\Services\CampaignBudgetOperation[]|\Google\Protobuf\Internal\RepeatedField $var
+ * @return $this
+ */
+ public function setOperations($var)
+ {
+ $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Ads\GoogleAds\V0\Services\CampaignBudgetOperation::class);
+ $this->operations = $arr;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Services/MutateCampaignBudgetsResponse.php b/src/Google/Ads/GoogleAds/V0/Services/MutateCampaignBudgetsResponse.php
new file mode 100644
index 000000000..d5790b632
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/MutateCampaignBudgetsResponse.php
@@ -0,0 +1,57 @@
+google.ads.googleads.v0.services.MutateCampaignBudgetsResponse
+ */
+class MutateCampaignBudgetsResponse extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * All results for the mutate.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.services.MutateCampaignBudgetResult results = 2;
+ */
+ private $results;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Services\CampaignBudgetService::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * All results for the mutate.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.services.MutateCampaignBudgetResult results = 2;
+ * @return \Google\Protobuf\Internal\RepeatedField
+ */
+ public function getResults()
+ {
+ return $this->results;
+ }
+
+ /**
+ * All results for the mutate.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.services.MutateCampaignBudgetResult results = 2;
+ * @param \Google\Ads\GoogleAds\V0\Services\MutateCampaignBudgetResult[]|\Google\Protobuf\Internal\RepeatedField $var
+ * @return $this
+ */
+ public function setResults($var)
+ {
+ $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Ads\GoogleAds\V0\Services\MutateCampaignBudgetResult::class);
+ $this->results = $arr;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Services/MutateCampaignCriteriaRequest.php b/src/Google/Ads/GoogleAds/V0/Services/MutateCampaignCriteriaRequest.php
new file mode 100644
index 000000000..d966907dd
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/MutateCampaignCriteriaRequest.php
@@ -0,0 +1,89 @@
+google.ads.googleads.v0.services.MutateCampaignCriteriaRequest
+ */
+class MutateCampaignCriteriaRequest extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The ID of the customer whose criteria are being modified.
+ *
+ * Generated from protobuf field string customer_id = 1;
+ */
+ private $customer_id = '';
+ /**
+ * The list of operations to perform on individual criteria.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.services.CampaignCriterionOperation operations = 2;
+ */
+ private $operations;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Services\CampaignCriterionService::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * The ID of the customer whose criteria are being modified.
+ *
+ * Generated from protobuf field string customer_id = 1;
+ * @return string
+ */
+ public function getCustomerId()
+ {
+ return $this->customer_id;
+ }
+
+ /**
+ * The ID of the customer whose criteria are being modified.
+ *
+ * Generated from protobuf field string customer_id = 1;
+ * @param string $var
+ * @return $this
+ */
+ public function setCustomerId($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->customer_id = $var;
+
+ return $this;
+ }
+
+ /**
+ * The list of operations to perform on individual criteria.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.services.CampaignCriterionOperation operations = 2;
+ * @return \Google\Protobuf\Internal\RepeatedField
+ */
+ public function getOperations()
+ {
+ return $this->operations;
+ }
+
+ /**
+ * The list of operations to perform on individual criteria.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.services.CampaignCriterionOperation operations = 2;
+ * @param \Google\Ads\GoogleAds\V0\Services\CampaignCriterionOperation[]|\Google\Protobuf\Internal\RepeatedField $var
+ * @return $this
+ */
+ public function setOperations($var)
+ {
+ $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Ads\GoogleAds\V0\Services\CampaignCriterionOperation::class);
+ $this->operations = $arr;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Services/MutateCampaignCriteriaResponse.php b/src/Google/Ads/GoogleAds/V0/Services/MutateCampaignCriteriaResponse.php
new file mode 100644
index 000000000..4267515cd
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/MutateCampaignCriteriaResponse.php
@@ -0,0 +1,57 @@
+google.ads.googleads.v0.services.MutateCampaignCriteriaResponse
+ */
+class MutateCampaignCriteriaResponse extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * All results for the mutate.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.services.MutateCampaignCriterionResult results = 2;
+ */
+ private $results;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Services\CampaignCriterionService::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * All results for the mutate.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.services.MutateCampaignCriterionResult results = 2;
+ * @return \Google\Protobuf\Internal\RepeatedField
+ */
+ public function getResults()
+ {
+ return $this->results;
+ }
+
+ /**
+ * All results for the mutate.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.services.MutateCampaignCriterionResult results = 2;
+ * @param \Google\Ads\GoogleAds\V0\Services\MutateCampaignCriterionResult[]|\Google\Protobuf\Internal\RepeatedField $var
+ * @return $this
+ */
+ public function setResults($var)
+ {
+ $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Ads\GoogleAds\V0\Services\MutateCampaignCriterionResult::class);
+ $this->results = $arr;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Services/MutateCampaignCriterionResult.php b/src/Google/Ads/GoogleAds/V0/Services/MutateCampaignCriterionResult.php
new file mode 100644
index 000000000..ec3a0b6c8
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/MutateCampaignCriterionResult.php
@@ -0,0 +1,57 @@
+google.ads.googleads.v0.services.MutateCampaignCriterionResult
+ */
+class MutateCampaignCriterionResult extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * Returned for successful operations.
+ *
+ * Generated from protobuf field string resource_name = 1;
+ */
+ private $resource_name = '';
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Services\CampaignCriterionService::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * Returned for successful operations.
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @return string
+ */
+ public function getResourceName()
+ {
+ return $this->resource_name;
+ }
+
+ /**
+ * Returned for successful operations.
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @param string $var
+ * @return $this
+ */
+ public function setResourceName($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->resource_name = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Services/MutateCampaignResult.php b/src/Google/Ads/GoogleAds/V0/Services/MutateCampaignResult.php
new file mode 100644
index 000000000..f5e37b48e
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/MutateCampaignResult.php
@@ -0,0 +1,57 @@
+google.ads.googleads.v0.services.MutateCampaignResult
+ */
+class MutateCampaignResult extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * Returned for successful operations.
+ *
+ * Generated from protobuf field string resource_name = 1;
+ */
+ private $resource_name = '';
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Services\CampaignService::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * Returned for successful operations.
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @return string
+ */
+ public function getResourceName()
+ {
+ return $this->resource_name;
+ }
+
+ /**
+ * Returned for successful operations.
+ *
+ * Generated from protobuf field string resource_name = 1;
+ * @param string $var
+ * @return $this
+ */
+ public function setResourceName($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->resource_name = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Services/MutateCampaignsRequest.php b/src/Google/Ads/GoogleAds/V0/Services/MutateCampaignsRequest.php
new file mode 100644
index 000000000..fa4b1417d
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/MutateCampaignsRequest.php
@@ -0,0 +1,89 @@
+google.ads.googleads.v0.services.MutateCampaignsRequest
+ */
+class MutateCampaignsRequest extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The ID of the customer whose campaigns are being modified.
+ *
+ * Generated from protobuf field string customer_id = 1;
+ */
+ private $customer_id = '';
+ /**
+ * The list of operations to perform on individual campaigns.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.services.CampaignOperation operations = 2;
+ */
+ private $operations;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Services\CampaignService::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * The ID of the customer whose campaigns are being modified.
+ *
+ * Generated from protobuf field string customer_id = 1;
+ * @return string
+ */
+ public function getCustomerId()
+ {
+ return $this->customer_id;
+ }
+
+ /**
+ * The ID of the customer whose campaigns are being modified.
+ *
+ * Generated from protobuf field string customer_id = 1;
+ * @param string $var
+ * @return $this
+ */
+ public function setCustomerId($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->customer_id = $var;
+
+ return $this;
+ }
+
+ /**
+ * The list of operations to perform on individual campaigns.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.services.CampaignOperation operations = 2;
+ * @return \Google\Protobuf\Internal\RepeatedField
+ */
+ public function getOperations()
+ {
+ return $this->operations;
+ }
+
+ /**
+ * The list of operations to perform on individual campaigns.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.services.CampaignOperation operations = 2;
+ * @param \Google\Ads\GoogleAds\V0\Services\CampaignOperation[]|\Google\Protobuf\Internal\RepeatedField $var
+ * @return $this
+ */
+ public function setOperations($var)
+ {
+ $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Ads\GoogleAds\V0\Services\CampaignOperation::class);
+ $this->operations = $arr;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Services/MutateCampaignsResponse.php b/src/Google/Ads/GoogleAds/V0/Services/MutateCampaignsResponse.php
new file mode 100644
index 000000000..2eb24bd7f
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/MutateCampaignsResponse.php
@@ -0,0 +1,57 @@
+google.ads.googleads.v0.services.MutateCampaignsResponse
+ */
+class MutateCampaignsResponse extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * All results for the mutate.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.services.MutateCampaignResult results = 2;
+ */
+ private $results;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Services\CampaignService::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * All results for the mutate.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.services.MutateCampaignResult results = 2;
+ * @return \Google\Protobuf\Internal\RepeatedField
+ */
+ public function getResults()
+ {
+ return $this->results;
+ }
+
+ /**
+ * All results for the mutate.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.services.MutateCampaignResult results = 2;
+ * @param \Google\Ads\GoogleAds\V0\Services\MutateCampaignResult[]|\Google\Protobuf\Internal\RepeatedField $var
+ * @return $this
+ */
+ public function setResults($var)
+ {
+ $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Ads\GoogleAds\V0\Services\MutateCampaignResult::class);
+ $this->results = $arr;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Services/RecommendationServiceClient.php b/src/Google/Ads/GoogleAds/V0/Services/RecommendationServiceClient.php
new file mode 100644
index 000000000..11b5fa375
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/RecommendationServiceClient.php
@@ -0,0 +1,42 @@
+_simpleRequest('/google.ads.googleads.v0.services.RecommendationService/GetRecommendation',
+ $argument,
+ ['\Google\Ads\GoogleAds\V0\Resources\Recommendation', 'decode'],
+ $metadata, $options);
+ }
+
+ /**
+ * Applies given recommendations with corresponding apply parameters.
+ * @param \Google\Ads\GoogleAds\V0\Services\ApplyRecommendationRequest $argument input argument
+ * @param array $metadata metadata
+ * @param array $options call options
+ */
+ public function ApplyRecommendation(\Google\Ads\GoogleAds\V0\Services\ApplyRecommendationRequest $argument,
+ $metadata = [], $options = []) {
+ return $this->_simpleRequest('/google.ads.googleads.v0.services.RecommendationService/ApplyRecommendation',
+ $argument,
+ ['\Google\Ads\GoogleAds\V0\Services\ApplyRecommendationResponse', 'decode'],
+ $metadata, $options);
+ }
+
+}
diff --git a/src/Google/Ads/GoogleAds/V0/Services/SearchGoogleAdsFieldsRequest.php b/src/Google/Ads/GoogleAds/V0/Services/SearchGoogleAdsFieldsRequest.php
new file mode 100644
index 000000000..e3bb33c2b
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/SearchGoogleAdsFieldsRequest.php
@@ -0,0 +1,133 @@
+google.ads.googleads.v0.services.SearchGoogleAdsFieldsRequest
+ */
+class SearchGoogleAdsFieldsRequest extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The query string.
+ *
+ * Generated from protobuf field string query = 1;
+ */
+ private $query = '';
+ /**
+ * Token of the page to retrieve. If not specified, the first page of
+ * results will be returned. Use the value obtained from `next_page_token`
+ * in the previous response in order to request the next page of results.
+ *
+ * Generated from protobuf field string page_token = 2;
+ */
+ private $page_token = '';
+ /**
+ * Number of elements to retrieve in a single page.
+ * When too large a page is requested, the server may decide to further
+ * limit the number of returned resources.
+ *
+ * Generated from protobuf field int32 page_size = 3;
+ */
+ private $page_size = 0;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Services\GoogleAdsFieldService::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * The query string.
+ *
+ * Generated from protobuf field string query = 1;
+ * @return string
+ */
+ public function getQuery()
+ {
+ return $this->query;
+ }
+
+ /**
+ * The query string.
+ *
+ * Generated from protobuf field string query = 1;
+ * @param string $var
+ * @return $this
+ */
+ public function setQuery($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->query = $var;
+
+ return $this;
+ }
+
+ /**
+ * Token of the page to retrieve. If not specified, the first page of
+ * results will be returned. Use the value obtained from `next_page_token`
+ * in the previous response in order to request the next page of results.
+ *
+ * Generated from protobuf field string page_token = 2;
+ * @return string
+ */
+ public function getPageToken()
+ {
+ return $this->page_token;
+ }
+
+ /**
+ * Token of the page to retrieve. If not specified, the first page of
+ * results will be returned. Use the value obtained from `next_page_token`
+ * in the previous response in order to request the next page of results.
+ *
+ * Generated from protobuf field string page_token = 2;
+ * @param string $var
+ * @return $this
+ */
+ public function setPageToken($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->page_token = $var;
+
+ return $this;
+ }
+
+ /**
+ * Number of elements to retrieve in a single page.
+ * When too large a page is requested, the server may decide to further
+ * limit the number of returned resources.
+ *
+ * Generated from protobuf field int32 page_size = 3;
+ * @return int
+ */
+ public function getPageSize()
+ {
+ return $this->page_size;
+ }
+
+ /**
+ * Number of elements to retrieve in a single page.
+ * When too large a page is requested, the server may decide to further
+ * limit the number of returned resources.
+ *
+ * Generated from protobuf field int32 page_size = 3;
+ * @param int $var
+ * @return $this
+ */
+ public function setPageSize($var)
+ {
+ GPBUtil::checkInt32($var);
+ $this->page_size = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Services/SearchGoogleAdsFieldsResponse.php b/src/Google/Ads/GoogleAds/V0/Services/SearchGoogleAdsFieldsResponse.php
new file mode 100644
index 000000000..e15a39d7f
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/SearchGoogleAdsFieldsResponse.php
@@ -0,0 +1,127 @@
+google.ads.googleads.v0.services.SearchGoogleAdsFieldsResponse
+ */
+class SearchGoogleAdsFieldsResponse extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The list of fields that matched the query.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.resources.GoogleAdsField results = 1;
+ */
+ private $results;
+ /**
+ * Pagination token used to retrieve the next page of results. Pass the
+ * content of this string as the `page_token` attribute of the next request.
+ * `next_page_token` is not returned for the last page.
+ *
+ * Generated from protobuf field string next_page_token = 2;
+ */
+ private $next_page_token = '';
+ /**
+ * Total number of results that match the query ignoring the LIMIT clause.
+ *
+ * Generated from protobuf field int64 total_results_count = 3;
+ */
+ private $total_results_count = 0;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Services\GoogleAdsFieldService::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * The list of fields that matched the query.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.resources.GoogleAdsField results = 1;
+ * @return \Google\Protobuf\Internal\RepeatedField
+ */
+ public function getResults()
+ {
+ return $this->results;
+ }
+
+ /**
+ * The list of fields that matched the query.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.resources.GoogleAdsField results = 1;
+ * @param \Google\Ads\GoogleAds\V0\Resources\GoogleAdsField[]|\Google\Protobuf\Internal\RepeatedField $var
+ * @return $this
+ */
+ public function setResults($var)
+ {
+ $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Ads\GoogleAds\V0\Resources\GoogleAdsField::class);
+ $this->results = $arr;
+
+ return $this;
+ }
+
+ /**
+ * Pagination token used to retrieve the next page of results. Pass the
+ * content of this string as the `page_token` attribute of the next request.
+ * `next_page_token` is not returned for the last page.
+ *
+ * Generated from protobuf field string next_page_token = 2;
+ * @return string
+ */
+ public function getNextPageToken()
+ {
+ return $this->next_page_token;
+ }
+
+ /**
+ * Pagination token used to retrieve the next page of results. Pass the
+ * content of this string as the `page_token` attribute of the next request.
+ * `next_page_token` is not returned for the last page.
+ *
+ * Generated from protobuf field string next_page_token = 2;
+ * @param string $var
+ * @return $this
+ */
+ public function setNextPageToken($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->next_page_token = $var;
+
+ return $this;
+ }
+
+ /**
+ * Total number of results that match the query ignoring the LIMIT clause.
+ *
+ * Generated from protobuf field int64 total_results_count = 3;
+ * @return int|string
+ */
+ public function getTotalResultsCount()
+ {
+ return $this->total_results_count;
+ }
+
+ /**
+ * Total number of results that match the query ignoring the LIMIT clause.
+ *
+ * Generated from protobuf field int64 total_results_count = 3;
+ * @param int|string $var
+ * @return $this
+ */
+ public function setTotalResultsCount($var)
+ {
+ GPBUtil::checkInt64($var);
+ $this->total_results_count = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Services/SearchGoogleAdsRequest.php b/src/Google/Ads/GoogleAds/V0/Services/SearchGoogleAdsRequest.php
new file mode 100644
index 000000000..993b39256
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/SearchGoogleAdsRequest.php
@@ -0,0 +1,168 @@
+google.ads.googleads.v0.services.SearchGoogleAdsRequest
+ */
+class SearchGoogleAdsRequest extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The ID of the customer being queried.
+ *
+ * Generated from protobuf field string customer_id = 1;
+ */
+ private $customer_id = '';
+ /**
+ * The query string.
+ *
+ * Generated from protobuf field string query = 2;
+ */
+ private $query = '';
+ /**
+ * Token of the page to retrieve. If not specified, the first
+ * page of results will be returned. Use the value obtained from
+ * `next_page_token` in the previous response in order to request
+ * the next page of results.
+ *
+ * Generated from protobuf field string page_token = 3;
+ */
+ private $page_token = '';
+ /**
+ * Number of elements to retrieve in a single page.
+ * When too large a page is requested, the server may decide to
+ * further limit the number of returned resources.
+ *
+ * Generated from protobuf field int32 page_size = 4;
+ */
+ private $page_size = 0;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Services\GoogleAdsService::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * The ID of the customer being queried.
+ *
+ * Generated from protobuf field string customer_id = 1;
+ * @return string
+ */
+ public function getCustomerId()
+ {
+ return $this->customer_id;
+ }
+
+ /**
+ * The ID of the customer being queried.
+ *
+ * Generated from protobuf field string customer_id = 1;
+ * @param string $var
+ * @return $this
+ */
+ public function setCustomerId($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->customer_id = $var;
+
+ return $this;
+ }
+
+ /**
+ * The query string.
+ *
+ * Generated from protobuf field string query = 2;
+ * @return string
+ */
+ public function getQuery()
+ {
+ return $this->query;
+ }
+
+ /**
+ * The query string.
+ *
+ * Generated from protobuf field string query = 2;
+ * @param string $var
+ * @return $this
+ */
+ public function setQuery($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->query = $var;
+
+ return $this;
+ }
+
+ /**
+ * Token of the page to retrieve. If not specified, the first
+ * page of results will be returned. Use the value obtained from
+ * `next_page_token` in the previous response in order to request
+ * the next page of results.
+ *
+ * Generated from protobuf field string page_token = 3;
+ * @return string
+ */
+ public function getPageToken()
+ {
+ return $this->page_token;
+ }
+
+ /**
+ * Token of the page to retrieve. If not specified, the first
+ * page of results will be returned. Use the value obtained from
+ * `next_page_token` in the previous response in order to request
+ * the next page of results.
+ *
+ * Generated from protobuf field string page_token = 3;
+ * @param string $var
+ * @return $this
+ */
+ public function setPageToken($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->page_token = $var;
+
+ return $this;
+ }
+
+ /**
+ * Number of elements to retrieve in a single page.
+ * When too large a page is requested, the server may decide to
+ * further limit the number of returned resources.
+ *
+ * Generated from protobuf field int32 page_size = 4;
+ * @return int
+ */
+ public function getPageSize()
+ {
+ return $this->page_size;
+ }
+
+ /**
+ * Number of elements to retrieve in a single page.
+ * When too large a page is requested, the server may decide to
+ * further limit the number of returned resources.
+ *
+ * Generated from protobuf field int32 page_size = 4;
+ * @param int $var
+ * @return $this
+ */
+ public function setPageSize($var)
+ {
+ GPBUtil::checkInt32($var);
+ $this->page_size = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Services/SearchGoogleAdsResponse.php b/src/Google/Ads/GoogleAds/V0/Services/SearchGoogleAdsResponse.php
new file mode 100644
index 000000000..7ac45265e
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/SearchGoogleAdsResponse.php
@@ -0,0 +1,165 @@
+google.ads.googleads.v0.services.SearchGoogleAdsResponse
+ */
+class SearchGoogleAdsResponse extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The list of rows that matched the query.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.services.GoogleAdsRow results = 1;
+ */
+ private $results;
+ /**
+ * Pagination token used to retrieve the next page of results.
+ * Pass the content of this string as the `page_token` attribute of
+ * the next request. `next_page_token` is not returned for the last
+ * page.
+ *
+ * Generated from protobuf field string next_page_token = 2;
+ */
+ private $next_page_token = '';
+ /**
+ * Total number of results that match the query ignoring the LIMIT
+ * clause.
+ *
+ * Generated from protobuf field int64 total_results_count = 3;
+ */
+ private $total_results_count = 0;
+ /**
+ * FieldMask that represents what fields were requested by the user.
+ *
+ * Generated from protobuf field .google.protobuf.FieldMask field_mask = 5;
+ */
+ private $field_mask = null;
+
+ public function __construct() {
+ \GPBMetadata\Google\Ads\GoogleAds\V0\Services\GoogleAdsService::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * The list of rows that matched the query.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.services.GoogleAdsRow results = 1;
+ * @return \Google\Protobuf\Internal\RepeatedField
+ */
+ public function getResults()
+ {
+ return $this->results;
+ }
+
+ /**
+ * The list of rows that matched the query.
+ *
+ * Generated from protobuf field repeated .google.ads.googleads.v0.services.GoogleAdsRow results = 1;
+ * @param \Google\Ads\GoogleAds\V0\Services\GoogleAdsRow[]|\Google\Protobuf\Internal\RepeatedField $var
+ * @return $this
+ */
+ public function setResults($var)
+ {
+ $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Ads\GoogleAds\V0\Services\GoogleAdsRow::class);
+ $this->results = $arr;
+
+ return $this;
+ }
+
+ /**
+ * Pagination token used to retrieve the next page of results.
+ * Pass the content of this string as the `page_token` attribute of
+ * the next request. `next_page_token` is not returned for the last
+ * page.
+ *
+ * Generated from protobuf field string next_page_token = 2;
+ * @return string
+ */
+ public function getNextPageToken()
+ {
+ return $this->next_page_token;
+ }
+
+ /**
+ * Pagination token used to retrieve the next page of results.
+ * Pass the content of this string as the `page_token` attribute of
+ * the next request. `next_page_token` is not returned for the last
+ * page.
+ *
+ * Generated from protobuf field string next_page_token = 2;
+ * @param string $var
+ * @return $this
+ */
+ public function setNextPageToken($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->next_page_token = $var;
+
+ return $this;
+ }
+
+ /**
+ * Total number of results that match the query ignoring the LIMIT
+ * clause.
+ *
+ * Generated from protobuf field int64 total_results_count = 3;
+ * @return int|string
+ */
+ public function getTotalResultsCount()
+ {
+ return $this->total_results_count;
+ }
+
+ /**
+ * Total number of results that match the query ignoring the LIMIT
+ * clause.
+ *
+ * Generated from protobuf field int64 total_results_count = 3;
+ * @param int|string $var
+ * @return $this
+ */
+ public function setTotalResultsCount($var)
+ {
+ GPBUtil::checkInt64($var);
+ $this->total_results_count = $var;
+
+ return $this;
+ }
+
+ /**
+ * FieldMask that represents what fields were requested by the user.
+ *
+ * Generated from protobuf field .google.protobuf.FieldMask field_mask = 5;
+ * @return \Google\Protobuf\FieldMask
+ */
+ public function getFieldMask()
+ {
+ return $this->field_mask;
+ }
+
+ /**
+ * FieldMask that represents what fields were requested by the user.
+ *
+ * Generated from protobuf field .google.protobuf.FieldMask field_mask = 5;
+ * @param \Google\Protobuf\FieldMask $var
+ * @return $this
+ */
+ public function setFieldMask($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\FieldMask::class);
+ $this->field_mask = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/src/Google/Ads/GoogleAds/V0/Services/resources/ad_group_ad_service_client_config.json b/src/Google/Ads/GoogleAds/V0/Services/resources/ad_group_ad_service_client_config.json
new file mode 100644
index 000000000..1cd303e5a
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/resources/ad_group_ad_service_client_config.json
@@ -0,0 +1,36 @@
+{
+ "interfaces": {
+ "google.ads.googleads.v0.services.AdGroupAdService": {
+ "retry_codes": {
+ "idempotent": [
+ "DEADLINE_EXCEEDED",
+ "UNAVAILABLE"
+ ],
+ "non_idempotent": []
+ },
+ "retry_params": {
+ "default": {
+ "initial_retry_delay_millis": 100,
+ "retry_delay_multiplier": 1.3,
+ "max_retry_delay_millis": 60000,
+ "initial_rpc_timeout_millis": 20000,
+ "rpc_timeout_multiplier": 1.0,
+ "max_rpc_timeout_millis": 20000,
+ "total_timeout_millis": 600000
+ }
+ },
+ "methods": {
+ "GetAdGroupAd": {
+ "timeout_millis": 60000,
+ "retry_codes_name": "idempotent",
+ "retry_params_name": "default"
+ },
+ "MutateAdGroupAds": {
+ "timeout_millis": 60000,
+ "retry_codes_name": "non_idempotent",
+ "retry_params_name": "default"
+ }
+ }
+ }
+ }
+}
diff --git a/src/Google/Ads/GoogleAds/V0/Services/resources/ad_group_ad_service_descriptor_config.php b/src/Google/Ads/GoogleAds/V0/Services/resources/ad_group_ad_service_descriptor_config.php
new file mode 100644
index 000000000..a63dc42a8
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/resources/ad_group_ad_service_descriptor_config.php
@@ -0,0 +1,8 @@
+ [
+ 'google.ads.googleads.v0.services.AdGroupAdService' => [
+ ],
+ ],
+];
diff --git a/src/Google/Ads/GoogleAds/V0/Services/resources/ad_group_ad_service_rest_client_config.php b/src/Google/Ads/GoogleAds/V0/Services/resources/ad_group_ad_service_rest_client_config.php
new file mode 100644
index 000000000..551fb7e2f
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/resources/ad_group_ad_service_rest_client_config.php
@@ -0,0 +1,31 @@
+ [
+ 'google.ads.googleads.v0.services.AdGroupAdService' => [
+ 'GetAdGroupAd' => [
+ 'method' => 'get',
+ 'uriTemplate' => '/v0/{resource_name=customers/*/adGroupAds/*}',
+ 'placeholders' => [
+ 'resource_name' => [
+ 'getters' => [
+ 'getResourceName',
+ ],
+ ],
+ ],
+ ],
+ 'MutateAdGroupAds' => [
+ 'method' => 'post',
+ 'uriTemplate' => '/v0/customers/{customer_id=*}/adGroupAds:mutate',
+ 'body' => '*',
+ 'placeholders' => [
+ 'customer_id' => [
+ 'getters' => [
+ 'getCustomerId',
+ ],
+ ],
+ ],
+ ],
+ ],
+ ],
+];
diff --git a/src/Google/Ads/GoogleAds/V0/Services/resources/ad_group_bid_modifier_service_client_config.json b/src/Google/Ads/GoogleAds/V0/Services/resources/ad_group_bid_modifier_service_client_config.json
new file mode 100644
index 000000000..c4fed0c1d
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/resources/ad_group_bid_modifier_service_client_config.json
@@ -0,0 +1,36 @@
+{
+ "interfaces": {
+ "google.ads.googleads.v0.services.AdGroupBidModifierService": {
+ "retry_codes": {
+ "idempotent": [
+ "DEADLINE_EXCEEDED",
+ "UNAVAILABLE"
+ ],
+ "non_idempotent": []
+ },
+ "retry_params": {
+ "default": {
+ "initial_retry_delay_millis": 100,
+ "retry_delay_multiplier": 1.3,
+ "max_retry_delay_millis": 60000,
+ "initial_rpc_timeout_millis": 20000,
+ "rpc_timeout_multiplier": 1.0,
+ "max_rpc_timeout_millis": 20000,
+ "total_timeout_millis": 600000
+ }
+ },
+ "methods": {
+ "GetAdGroupBidModifier": {
+ "timeout_millis": 60000,
+ "retry_codes_name": "idempotent",
+ "retry_params_name": "default"
+ },
+ "MutateAdGroupBidModifiers": {
+ "timeout_millis": 60000,
+ "retry_codes_name": "non_idempotent",
+ "retry_params_name": "default"
+ }
+ }
+ }
+ }
+}
diff --git a/src/Google/Ads/GoogleAds/V0/Services/resources/ad_group_bid_modifier_service_descriptor_config.php b/src/Google/Ads/GoogleAds/V0/Services/resources/ad_group_bid_modifier_service_descriptor_config.php
new file mode 100644
index 000000000..88b7c296d
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/resources/ad_group_bid_modifier_service_descriptor_config.php
@@ -0,0 +1,8 @@
+ [
+ 'google.ads.googleads.v0.services.AdGroupBidModifierService' => [
+ ],
+ ],
+];
diff --git a/src/Google/Ads/GoogleAds/V0/Services/resources/ad_group_bid_modifier_service_rest_client_config.php b/src/Google/Ads/GoogleAds/V0/Services/resources/ad_group_bid_modifier_service_rest_client_config.php
new file mode 100644
index 000000000..436be8dc0
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/resources/ad_group_bid_modifier_service_rest_client_config.php
@@ -0,0 +1,31 @@
+ [
+ 'google.ads.googleads.v0.services.AdGroupBidModifierService' => [
+ 'GetAdGroupBidModifier' => [
+ 'method' => 'get',
+ 'uriTemplate' => '/v0/{resource_name=customers/*/adGroupBidModifiers/*}',
+ 'placeholders' => [
+ 'resource_name' => [
+ 'getters' => [
+ 'getResourceName',
+ ],
+ ],
+ ],
+ ],
+ 'MutateAdGroupBidModifiers' => [
+ 'method' => 'post',
+ 'uriTemplate' => '/v0/customers/{customer_id=*}/adGroupBidModifiers:mutate',
+ 'body' => '*',
+ 'placeholders' => [
+ 'customer_id' => [
+ 'getters' => [
+ 'getCustomerId',
+ ],
+ ],
+ ],
+ ],
+ ],
+ ],
+];
diff --git a/src/Google/Ads/GoogleAds/V0/Services/resources/ad_group_criterion_service_client_config.json b/src/Google/Ads/GoogleAds/V0/Services/resources/ad_group_criterion_service_client_config.json
new file mode 100644
index 000000000..2aca664e5
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/resources/ad_group_criterion_service_client_config.json
@@ -0,0 +1,36 @@
+{
+ "interfaces": {
+ "google.ads.googleads.v0.services.AdGroupCriterionService": {
+ "retry_codes": {
+ "idempotent": [
+ "DEADLINE_EXCEEDED",
+ "UNAVAILABLE"
+ ],
+ "non_idempotent": []
+ },
+ "retry_params": {
+ "default": {
+ "initial_retry_delay_millis": 100,
+ "retry_delay_multiplier": 1.3,
+ "max_retry_delay_millis": 60000,
+ "initial_rpc_timeout_millis": 20000,
+ "rpc_timeout_multiplier": 1.0,
+ "max_rpc_timeout_millis": 20000,
+ "total_timeout_millis": 600000
+ }
+ },
+ "methods": {
+ "GetAdGroupCriterion": {
+ "timeout_millis": 60000,
+ "retry_codes_name": "idempotent",
+ "retry_params_name": "default"
+ },
+ "MutateAdGroupCriteria": {
+ "timeout_millis": 60000,
+ "retry_codes_name": "non_idempotent",
+ "retry_params_name": "default"
+ }
+ }
+ }
+ }
+}
diff --git a/src/Google/Ads/GoogleAds/V0/Services/resources/ad_group_criterion_service_descriptor_config.php b/src/Google/Ads/GoogleAds/V0/Services/resources/ad_group_criterion_service_descriptor_config.php
new file mode 100644
index 000000000..df47767ee
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/resources/ad_group_criterion_service_descriptor_config.php
@@ -0,0 +1,8 @@
+ [
+ 'google.ads.googleads.v0.services.AdGroupCriterionService' => [
+ ],
+ ],
+];
diff --git a/src/Google/Ads/GoogleAds/V0/Services/resources/ad_group_criterion_service_rest_client_config.php b/src/Google/Ads/GoogleAds/V0/Services/resources/ad_group_criterion_service_rest_client_config.php
new file mode 100644
index 000000000..9cc7faf61
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/resources/ad_group_criterion_service_rest_client_config.php
@@ -0,0 +1,31 @@
+ [
+ 'google.ads.googleads.v0.services.AdGroupCriterionService' => [
+ 'GetAdGroupCriterion' => [
+ 'method' => 'get',
+ 'uriTemplate' => '/v0/{resource_name=customers/*/adGroupCriteria/*}',
+ 'placeholders' => [
+ 'resource_name' => [
+ 'getters' => [
+ 'getResourceName',
+ ],
+ ],
+ ],
+ ],
+ 'MutateAdGroupCriteria' => [
+ 'method' => 'post',
+ 'uriTemplate' => '/v0/customers/{customer_id=*}/adGroupCriteria:mutate',
+ 'body' => '*',
+ 'placeholders' => [
+ 'customer_id' => [
+ 'getters' => [
+ 'getCustomerId',
+ ],
+ ],
+ ],
+ ],
+ ],
+ ],
+];
diff --git a/src/Google/Ads/GoogleAds/V0/Services/resources/ad_group_service_client_config.json b/src/Google/Ads/GoogleAds/V0/Services/resources/ad_group_service_client_config.json
new file mode 100644
index 000000000..6847a8195
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/resources/ad_group_service_client_config.json
@@ -0,0 +1,36 @@
+{
+ "interfaces": {
+ "google.ads.googleads.v0.services.AdGroupService": {
+ "retry_codes": {
+ "idempotent": [
+ "DEADLINE_EXCEEDED",
+ "UNAVAILABLE"
+ ],
+ "non_idempotent": []
+ },
+ "retry_params": {
+ "default": {
+ "initial_retry_delay_millis": 100,
+ "retry_delay_multiplier": 1.3,
+ "max_retry_delay_millis": 60000,
+ "initial_rpc_timeout_millis": 20000,
+ "rpc_timeout_multiplier": 1.0,
+ "max_rpc_timeout_millis": 20000,
+ "total_timeout_millis": 600000
+ }
+ },
+ "methods": {
+ "GetAdGroup": {
+ "timeout_millis": 60000,
+ "retry_codes_name": "idempotent",
+ "retry_params_name": "default"
+ },
+ "MutateAdGroups": {
+ "timeout_millis": 60000,
+ "retry_codes_name": "non_idempotent",
+ "retry_params_name": "default"
+ }
+ }
+ }
+ }
+}
diff --git a/src/Google/Ads/GoogleAds/V0/Services/resources/ad_group_service_descriptor_config.php b/src/Google/Ads/GoogleAds/V0/Services/resources/ad_group_service_descriptor_config.php
new file mode 100644
index 000000000..a053af4b3
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/resources/ad_group_service_descriptor_config.php
@@ -0,0 +1,8 @@
+ [
+ 'google.ads.googleads.v0.services.AdGroupService' => [
+ ],
+ ],
+];
diff --git a/src/Google/Ads/GoogleAds/V0/Services/resources/ad_group_service_rest_client_config.php b/src/Google/Ads/GoogleAds/V0/Services/resources/ad_group_service_rest_client_config.php
new file mode 100644
index 000000000..81391f1d0
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/resources/ad_group_service_rest_client_config.php
@@ -0,0 +1,31 @@
+ [
+ 'google.ads.googleads.v0.services.AdGroupService' => [
+ 'GetAdGroup' => [
+ 'method' => 'get',
+ 'uriTemplate' => '/v0/{resource_name=customers/*/adGroups/*}',
+ 'placeholders' => [
+ 'resource_name' => [
+ 'getters' => [
+ 'getResourceName',
+ ],
+ ],
+ ],
+ ],
+ 'MutateAdGroups' => [
+ 'method' => 'post',
+ 'uriTemplate' => '/v0/customers/{customer_id=*}/adGroups:mutate',
+ 'body' => '*',
+ 'placeholders' => [
+ 'customer_id' => [
+ 'getters' => [
+ 'getCustomerId',
+ ],
+ ],
+ ],
+ ],
+ ],
+ ],
+];
diff --git a/src/Google/Ads/GoogleAds/V0/Services/resources/bidding_strategy_service_client_config.json b/src/Google/Ads/GoogleAds/V0/Services/resources/bidding_strategy_service_client_config.json
new file mode 100644
index 000000000..03581bedb
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/resources/bidding_strategy_service_client_config.json
@@ -0,0 +1,36 @@
+{
+ "interfaces": {
+ "google.ads.googleads.v0.services.BiddingStrategyService": {
+ "retry_codes": {
+ "idempotent": [
+ "DEADLINE_EXCEEDED",
+ "UNAVAILABLE"
+ ],
+ "non_idempotent": []
+ },
+ "retry_params": {
+ "default": {
+ "initial_retry_delay_millis": 100,
+ "retry_delay_multiplier": 1.3,
+ "max_retry_delay_millis": 60000,
+ "initial_rpc_timeout_millis": 20000,
+ "rpc_timeout_multiplier": 1.0,
+ "max_rpc_timeout_millis": 20000,
+ "total_timeout_millis": 600000
+ }
+ },
+ "methods": {
+ "GetBiddingStrategy": {
+ "timeout_millis": 60000,
+ "retry_codes_name": "idempotent",
+ "retry_params_name": "default"
+ },
+ "MutateBiddingStrategies": {
+ "timeout_millis": 60000,
+ "retry_codes_name": "non_idempotent",
+ "retry_params_name": "default"
+ }
+ }
+ }
+ }
+}
diff --git a/src/Google/Ads/GoogleAds/V0/Services/resources/bidding_strategy_service_descriptor_config.php b/src/Google/Ads/GoogleAds/V0/Services/resources/bidding_strategy_service_descriptor_config.php
new file mode 100644
index 000000000..93dd086e0
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/resources/bidding_strategy_service_descriptor_config.php
@@ -0,0 +1,8 @@
+ [
+ 'google.ads.googleads.v0.services.BiddingStrategyService' => [
+ ],
+ ],
+];
diff --git a/src/Google/Ads/GoogleAds/V0/Services/resources/bidding_strategy_service_rest_client_config.php b/src/Google/Ads/GoogleAds/V0/Services/resources/bidding_strategy_service_rest_client_config.php
new file mode 100644
index 000000000..f34865463
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/resources/bidding_strategy_service_rest_client_config.php
@@ -0,0 +1,31 @@
+ [
+ 'google.ads.googleads.v0.services.BiddingStrategyService' => [
+ 'GetBiddingStrategy' => [
+ 'method' => 'get',
+ 'uriTemplate' => '/v0/{resource_name=customers/*/biddingStrategies/*}',
+ 'placeholders' => [
+ 'resource_name' => [
+ 'getters' => [
+ 'getResourceName',
+ ],
+ ],
+ ],
+ ],
+ 'MutateBiddingStrategies' => [
+ 'method' => 'post',
+ 'uriTemplate' => '/v0/customers/{customer_id=*}/biddingStrategies:mutate',
+ 'body' => '*',
+ 'placeholders' => [
+ 'customer_id' => [
+ 'getters' => [
+ 'getCustomerId',
+ ],
+ ],
+ ],
+ ],
+ ],
+ ],
+];
diff --git a/src/Google/Ads/GoogleAds/V0/Services/resources/campaign_budget_service_client_config.json b/src/Google/Ads/GoogleAds/V0/Services/resources/campaign_budget_service_client_config.json
new file mode 100644
index 000000000..e7d52a320
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/resources/campaign_budget_service_client_config.json
@@ -0,0 +1,36 @@
+{
+ "interfaces": {
+ "google.ads.googleads.v0.services.CampaignBudgetService": {
+ "retry_codes": {
+ "idempotent": [
+ "DEADLINE_EXCEEDED",
+ "UNAVAILABLE"
+ ],
+ "non_idempotent": []
+ },
+ "retry_params": {
+ "default": {
+ "initial_retry_delay_millis": 100,
+ "retry_delay_multiplier": 1.3,
+ "max_retry_delay_millis": 60000,
+ "initial_rpc_timeout_millis": 20000,
+ "rpc_timeout_multiplier": 1.0,
+ "max_rpc_timeout_millis": 20000,
+ "total_timeout_millis": 600000
+ }
+ },
+ "methods": {
+ "GetCampaignBudget": {
+ "timeout_millis": 60000,
+ "retry_codes_name": "idempotent",
+ "retry_params_name": "default"
+ },
+ "MutateCampaignBudgets": {
+ "timeout_millis": 60000,
+ "retry_codes_name": "non_idempotent",
+ "retry_params_name": "default"
+ }
+ }
+ }
+ }
+}
diff --git a/src/Google/Ads/GoogleAds/V0/Services/resources/campaign_budget_service_descriptor_config.php b/src/Google/Ads/GoogleAds/V0/Services/resources/campaign_budget_service_descriptor_config.php
new file mode 100644
index 000000000..0d42ed370
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/resources/campaign_budget_service_descriptor_config.php
@@ -0,0 +1,8 @@
+ [
+ 'google.ads.googleads.v0.services.CampaignBudgetService' => [
+ ],
+ ],
+];
diff --git a/src/Google/Ads/GoogleAds/V0/Services/resources/campaign_budget_service_rest_client_config.php b/src/Google/Ads/GoogleAds/V0/Services/resources/campaign_budget_service_rest_client_config.php
new file mode 100644
index 000000000..cae1bb1de
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/resources/campaign_budget_service_rest_client_config.php
@@ -0,0 +1,31 @@
+ [
+ 'google.ads.googleads.v0.services.CampaignBudgetService' => [
+ 'GetCampaignBudget' => [
+ 'method' => 'get',
+ 'uriTemplate' => '/v0/{resource_name=customers/*/campaignBudgets/*}',
+ 'placeholders' => [
+ 'resource_name' => [
+ 'getters' => [
+ 'getResourceName',
+ ],
+ ],
+ ],
+ ],
+ 'MutateCampaignBudgets' => [
+ 'method' => 'post',
+ 'uriTemplate' => '/v0/customers/{customer_id=*}/campaignBudgets:mutate',
+ 'body' => '*',
+ 'placeholders' => [
+ 'customer_id' => [
+ 'getters' => [
+ 'getCustomerId',
+ ],
+ ],
+ ],
+ ],
+ ],
+ ],
+];
diff --git a/src/Google/Ads/GoogleAds/V0/Services/resources/campaign_criterion_service_client_config.json b/src/Google/Ads/GoogleAds/V0/Services/resources/campaign_criterion_service_client_config.json
new file mode 100644
index 000000000..b870d1adf
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/resources/campaign_criterion_service_client_config.json
@@ -0,0 +1,36 @@
+{
+ "interfaces": {
+ "google.ads.googleads.v0.services.CampaignCriterionService": {
+ "retry_codes": {
+ "idempotent": [
+ "DEADLINE_EXCEEDED",
+ "UNAVAILABLE"
+ ],
+ "non_idempotent": []
+ },
+ "retry_params": {
+ "default": {
+ "initial_retry_delay_millis": 100,
+ "retry_delay_multiplier": 1.3,
+ "max_retry_delay_millis": 60000,
+ "initial_rpc_timeout_millis": 20000,
+ "rpc_timeout_multiplier": 1.0,
+ "max_rpc_timeout_millis": 20000,
+ "total_timeout_millis": 600000
+ }
+ },
+ "methods": {
+ "GetCampaignCriterion": {
+ "timeout_millis": 60000,
+ "retry_codes_name": "idempotent",
+ "retry_params_name": "default"
+ },
+ "MutateCampaignCriteria": {
+ "timeout_millis": 60000,
+ "retry_codes_name": "non_idempotent",
+ "retry_params_name": "default"
+ }
+ }
+ }
+ }
+}
diff --git a/src/Google/Ads/GoogleAds/V0/Services/resources/campaign_criterion_service_descriptor_config.php b/src/Google/Ads/GoogleAds/V0/Services/resources/campaign_criterion_service_descriptor_config.php
new file mode 100644
index 000000000..c856b59ab
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/resources/campaign_criterion_service_descriptor_config.php
@@ -0,0 +1,8 @@
+ [
+ 'google.ads.googleads.v0.services.CampaignCriterionService' => [
+ ],
+ ],
+];
diff --git a/src/Google/Ads/GoogleAds/V0/Services/resources/campaign_criterion_service_rest_client_config.php b/src/Google/Ads/GoogleAds/V0/Services/resources/campaign_criterion_service_rest_client_config.php
new file mode 100644
index 000000000..204923938
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/resources/campaign_criterion_service_rest_client_config.php
@@ -0,0 +1,31 @@
+ [
+ 'google.ads.googleads.v0.services.CampaignCriterionService' => [
+ 'GetCampaignCriterion' => [
+ 'method' => 'get',
+ 'uriTemplate' => '/v0/{resource_name=customers/*/campaignCriteria/*}',
+ 'placeholders' => [
+ 'resource_name' => [
+ 'getters' => [
+ 'getResourceName',
+ ],
+ ],
+ ],
+ ],
+ 'MutateCampaignCriteria' => [
+ 'method' => 'post',
+ 'uriTemplate' => '/v0/customers/{customer_id=*}/campaignCriteria:mutate',
+ 'body' => '*',
+ 'placeholders' => [
+ 'customer_id' => [
+ 'getters' => [
+ 'getCustomerId',
+ ],
+ ],
+ ],
+ ],
+ ],
+ ],
+];
diff --git a/src/Google/Ads/GoogleAds/V0/Services/resources/campaign_service_client_config.json b/src/Google/Ads/GoogleAds/V0/Services/resources/campaign_service_client_config.json
new file mode 100644
index 000000000..add92d30b
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/resources/campaign_service_client_config.json
@@ -0,0 +1,36 @@
+{
+ "interfaces": {
+ "google.ads.googleads.v0.services.CampaignService": {
+ "retry_codes": {
+ "idempotent": [
+ "DEADLINE_EXCEEDED",
+ "UNAVAILABLE"
+ ],
+ "non_idempotent": []
+ },
+ "retry_params": {
+ "default": {
+ "initial_retry_delay_millis": 100,
+ "retry_delay_multiplier": 1.3,
+ "max_retry_delay_millis": 60000,
+ "initial_rpc_timeout_millis": 20000,
+ "rpc_timeout_multiplier": 1.0,
+ "max_rpc_timeout_millis": 20000,
+ "total_timeout_millis": 600000
+ }
+ },
+ "methods": {
+ "GetCampaign": {
+ "timeout_millis": 60000,
+ "retry_codes_name": "idempotent",
+ "retry_params_name": "default"
+ },
+ "MutateCampaigns": {
+ "timeout_millis": 60000,
+ "retry_codes_name": "non_idempotent",
+ "retry_params_name": "default"
+ }
+ }
+ }
+ }
+}
diff --git a/src/Google/Ads/GoogleAds/V0/Services/resources/campaign_service_descriptor_config.php b/src/Google/Ads/GoogleAds/V0/Services/resources/campaign_service_descriptor_config.php
new file mode 100644
index 000000000..642774c17
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/resources/campaign_service_descriptor_config.php
@@ -0,0 +1,8 @@
+ [
+ 'google.ads.googleads.v0.services.CampaignService' => [
+ ],
+ ],
+];
diff --git a/src/Google/Ads/GoogleAds/V0/Services/resources/campaign_service_rest_client_config.php b/src/Google/Ads/GoogleAds/V0/Services/resources/campaign_service_rest_client_config.php
new file mode 100644
index 000000000..8cc60f41a
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/resources/campaign_service_rest_client_config.php
@@ -0,0 +1,31 @@
+ [
+ 'google.ads.googleads.v0.services.CampaignService' => [
+ 'GetCampaign' => [
+ 'method' => 'get',
+ 'uriTemplate' => '/v0/{resource_name=customers/*/campaigns/*}',
+ 'placeholders' => [
+ 'resource_name' => [
+ 'getters' => [
+ 'getResourceName',
+ ],
+ ],
+ ],
+ ],
+ 'MutateCampaigns' => [
+ 'method' => 'post',
+ 'uriTemplate' => '/v0/customers/{customer_id=*}/campaigns:mutate',
+ 'body' => '*',
+ 'placeholders' => [
+ 'customer_id' => [
+ 'getters' => [
+ 'getCustomerId',
+ ],
+ ],
+ ],
+ ],
+ ],
+ ],
+];
diff --git a/src/Google/Ads/GoogleAds/V0/Services/resources/customer_service_client_config.json b/src/Google/Ads/GoogleAds/V0/Services/resources/customer_service_client_config.json
new file mode 100644
index 000000000..1575891ca
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/resources/customer_service_client_config.json
@@ -0,0 +1,31 @@
+{
+ "interfaces": {
+ "google.ads.googleads.v0.services.CustomerService": {
+ "retry_codes": {
+ "idempotent": [
+ "DEADLINE_EXCEEDED",
+ "UNAVAILABLE"
+ ],
+ "non_idempotent": []
+ },
+ "retry_params": {
+ "default": {
+ "initial_retry_delay_millis": 100,
+ "retry_delay_multiplier": 1.3,
+ "max_retry_delay_millis": 60000,
+ "initial_rpc_timeout_millis": 20000,
+ "rpc_timeout_multiplier": 1.0,
+ "max_rpc_timeout_millis": 20000,
+ "total_timeout_millis": 600000
+ }
+ },
+ "methods": {
+ "GetCustomer": {
+ "timeout_millis": 60000,
+ "retry_codes_name": "idempotent",
+ "retry_params_name": "default"
+ }
+ }
+ }
+ }
+}
diff --git a/src/Google/Ads/GoogleAds/V0/Services/resources/customer_service_descriptor_config.php b/src/Google/Ads/GoogleAds/V0/Services/resources/customer_service_descriptor_config.php
new file mode 100644
index 000000000..9355f7272
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/resources/customer_service_descriptor_config.php
@@ -0,0 +1,8 @@
+ [
+ 'google.ads.googleads.v0.services.CustomerService' => [
+ ],
+ ],
+];
diff --git a/src/Google/Ads/GoogleAds/V0/Services/resources/customer_service_rest_client_config.php b/src/Google/Ads/GoogleAds/V0/Services/resources/customer_service_rest_client_config.php
new file mode 100644
index 000000000..2ffb9be6a
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/resources/customer_service_rest_client_config.php
@@ -0,0 +1,19 @@
+ [
+ 'google.ads.googleads.v0.services.CustomerService' => [
+ 'GetCustomer' => [
+ 'method' => 'get',
+ 'uriTemplate' => '/v0/{resource_name=customers/*}',
+ 'placeholders' => [
+ 'resource_name' => [
+ 'getters' => [
+ 'getResourceName',
+ ],
+ ],
+ ],
+ ],
+ ],
+ ],
+];
diff --git a/src/Google/Ads/GoogleAds/V0/Services/resources/geo_target_constant_service_client_config.json b/src/Google/Ads/GoogleAds/V0/Services/resources/geo_target_constant_service_client_config.json
new file mode 100644
index 000000000..7b907e0a1
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/resources/geo_target_constant_service_client_config.json
@@ -0,0 +1,31 @@
+{
+ "interfaces": {
+ "google.ads.googleads.v0.services.GeoTargetConstantService": {
+ "retry_codes": {
+ "idempotent": [
+ "DEADLINE_EXCEEDED",
+ "UNAVAILABLE"
+ ],
+ "non_idempotent": []
+ },
+ "retry_params": {
+ "default": {
+ "initial_retry_delay_millis": 100,
+ "retry_delay_multiplier": 1.3,
+ "max_retry_delay_millis": 60000,
+ "initial_rpc_timeout_millis": 20000,
+ "rpc_timeout_multiplier": 1.0,
+ "max_rpc_timeout_millis": 20000,
+ "total_timeout_millis": 600000
+ }
+ },
+ "methods": {
+ "GetGeoTargetConstant": {
+ "timeout_millis": 60000,
+ "retry_codes_name": "idempotent",
+ "retry_params_name": "default"
+ }
+ }
+ }
+ }
+}
diff --git a/src/Google/Ads/GoogleAds/V0/Services/resources/geo_target_constant_service_descriptor_config.php b/src/Google/Ads/GoogleAds/V0/Services/resources/geo_target_constant_service_descriptor_config.php
new file mode 100644
index 000000000..a8788ada8
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/resources/geo_target_constant_service_descriptor_config.php
@@ -0,0 +1,8 @@
+ [
+ 'google.ads.googleads.v0.services.GeoTargetConstantService' => [
+ ],
+ ],
+];
diff --git a/src/Google/Ads/GoogleAds/V0/Services/resources/geo_target_constant_service_rest_client_config.php b/src/Google/Ads/GoogleAds/V0/Services/resources/geo_target_constant_service_rest_client_config.php
new file mode 100644
index 000000000..1ae33d78f
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/resources/geo_target_constant_service_rest_client_config.php
@@ -0,0 +1,19 @@
+ [
+ 'google.ads.googleads.v0.services.GeoTargetConstantService' => [
+ 'GetGeoTargetConstant' => [
+ 'method' => 'get',
+ 'uriTemplate' => '/v0/{resource_name=geoTargetConstants/*}',
+ 'placeholders' => [
+ 'resource_name' => [
+ 'getters' => [
+ 'getResourceName',
+ ],
+ ],
+ ],
+ ],
+ ],
+ ],
+];
diff --git a/src/Google/Ads/GoogleAds/V0/Services/resources/google_ads_field_service_client_config.json b/src/Google/Ads/GoogleAds/V0/Services/resources/google_ads_field_service_client_config.json
new file mode 100644
index 000000000..cc6d14e48
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/resources/google_ads_field_service_client_config.json
@@ -0,0 +1,36 @@
+{
+ "interfaces": {
+ "google.ads.googleads.v0.services.GoogleAdsFieldService": {
+ "retry_codes": {
+ "idempotent": [
+ "DEADLINE_EXCEEDED",
+ "UNAVAILABLE"
+ ],
+ "non_idempotent": []
+ },
+ "retry_params": {
+ "default": {
+ "initial_retry_delay_millis": 100,
+ "retry_delay_multiplier": 1.3,
+ "max_retry_delay_millis": 60000,
+ "initial_rpc_timeout_millis": 20000,
+ "rpc_timeout_multiplier": 1.0,
+ "max_rpc_timeout_millis": 20000,
+ "total_timeout_millis": 600000
+ }
+ },
+ "methods": {
+ "GetGoogleAdsField": {
+ "timeout_millis": 60000,
+ "retry_codes_name": "idempotent",
+ "retry_params_name": "default"
+ },
+ "SearchGoogleAdsFields": {
+ "timeout_millis": 60000,
+ "retry_codes_name": "non_idempotent",
+ "retry_params_name": "default"
+ }
+ }
+ }
+ }
+}
diff --git a/src/Google/Ads/GoogleAds/V0/Services/resources/google_ads_field_service_descriptor_config.php b/src/Google/Ads/GoogleAds/V0/Services/resources/google_ads_field_service_descriptor_config.php
new file mode 100644
index 000000000..520e74263
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/resources/google_ads_field_service_descriptor_config.php
@@ -0,0 +1,18 @@
+ [
+ 'google.ads.googleads.v0.services.GoogleAdsFieldService' => [
+ 'SearchGoogleAdsFields' => [
+ 'pageStreaming' => [
+ 'requestPageTokenGetMethod' => 'getPageToken',
+ 'requestPageTokenSetMethod' => 'setPageToken',
+ 'requestPageSizeGetMethod' => 'getPageSize',
+ 'requestPageSizeSetMethod' => 'setPageSize',
+ 'responsePageTokenGetMethod' => 'getNextPageToken',
+ 'resourcesGetMethod' => 'getResults',
+ ],
+ ],
+ ],
+ ],
+];
diff --git a/src/Google/Ads/GoogleAds/V0/Services/resources/google_ads_field_service_rest_client_config.php b/src/Google/Ads/GoogleAds/V0/Services/resources/google_ads_field_service_rest_client_config.php
new file mode 100644
index 000000000..213565f77
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/resources/google_ads_field_service_rest_client_config.php
@@ -0,0 +1,24 @@
+ [
+ 'google.ads.googleads.v0.services.GoogleAdsFieldService' => [
+ 'GetGoogleAdsField' => [
+ 'method' => 'get',
+ 'uriTemplate' => '/v0/{resource_name=googleAdsFields/*}',
+ 'placeholders' => [
+ 'resource_name' => [
+ 'getters' => [
+ 'getResourceName',
+ ],
+ ],
+ ],
+ ],
+ 'SearchGoogleAdsFields' => [
+ 'method' => 'post',
+ 'uriTemplate' => '/v0/googleAdsFields:search',
+ 'body' => '*',
+ ],
+ ],
+ ],
+];
diff --git a/src/Google/Ads/GoogleAds/V0/Services/resources/google_ads_service_client_config.json b/src/Google/Ads/GoogleAds/V0/Services/resources/google_ads_service_client_config.json
new file mode 100644
index 000000000..c5405e0e2
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/resources/google_ads_service_client_config.json
@@ -0,0 +1,31 @@
+{
+ "interfaces": {
+ "google.ads.googleads.v0.services.GoogleAdsService": {
+ "retry_codes": {
+ "idempotent": [
+ "DEADLINE_EXCEEDED",
+ "UNAVAILABLE"
+ ],
+ "non_idempotent": []
+ },
+ "retry_params": {
+ "default": {
+ "initial_retry_delay_millis": 100,
+ "retry_delay_multiplier": 1.3,
+ "max_retry_delay_millis": 60000,
+ "initial_rpc_timeout_millis": 20000,
+ "rpc_timeout_multiplier": 1.0,
+ "max_rpc_timeout_millis": 20000,
+ "total_timeout_millis": 600000
+ }
+ },
+ "methods": {
+ "Search": {
+ "timeout_millis": 60000,
+ "retry_codes_name": "non_idempotent",
+ "retry_params_name": "default"
+ }
+ }
+ }
+ }
+}
diff --git a/src/Google/Ads/GoogleAds/V0/Services/resources/google_ads_service_descriptor_config.php b/src/Google/Ads/GoogleAds/V0/Services/resources/google_ads_service_descriptor_config.php
new file mode 100644
index 000000000..e84d96889
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/resources/google_ads_service_descriptor_config.php
@@ -0,0 +1,18 @@
+ [
+ 'google.ads.googleads.v0.services.GoogleAdsService' => [
+ 'Search' => [
+ 'pageStreaming' => [
+ 'requestPageTokenGetMethod' => 'getPageToken',
+ 'requestPageTokenSetMethod' => 'setPageToken',
+ 'requestPageSizeGetMethod' => 'getPageSize',
+ 'requestPageSizeSetMethod' => 'setPageSize',
+ 'responsePageTokenGetMethod' => 'getNextPageToken',
+ 'resourcesGetMethod' => 'getResults',
+ ],
+ ],
+ ],
+ ],
+];
diff --git a/src/Google/Ads/GoogleAds/V0/Services/resources/google_ads_service_rest_client_config.php b/src/Google/Ads/GoogleAds/V0/Services/resources/google_ads_service_rest_client_config.php
new file mode 100644
index 000000000..925cc3fb8
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/resources/google_ads_service_rest_client_config.php
@@ -0,0 +1,20 @@
+ [
+ 'google.ads.googleads.v0.services.GoogleAdsService' => [
+ 'Search' => [
+ 'method' => 'post',
+ 'uriTemplate' => '/v0/customers/{customer_id=*}/googleAds:search',
+ 'body' => '*',
+ 'placeholders' => [
+ 'customer_id' => [
+ 'getters' => [
+ 'getCustomerId',
+ ],
+ ],
+ ],
+ ],
+ ],
+ ],
+];
diff --git a/src/Google/Ads/GoogleAds/V0/Services/resources/keyword_view_service_client_config.json b/src/Google/Ads/GoogleAds/V0/Services/resources/keyword_view_service_client_config.json
new file mode 100644
index 000000000..1a57c17a5
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/resources/keyword_view_service_client_config.json
@@ -0,0 +1,31 @@
+{
+ "interfaces": {
+ "google.ads.googleads.v0.services.KeywordViewService": {
+ "retry_codes": {
+ "idempotent": [
+ "DEADLINE_EXCEEDED",
+ "UNAVAILABLE"
+ ],
+ "non_idempotent": []
+ },
+ "retry_params": {
+ "default": {
+ "initial_retry_delay_millis": 100,
+ "retry_delay_multiplier": 1.3,
+ "max_retry_delay_millis": 60000,
+ "initial_rpc_timeout_millis": 20000,
+ "rpc_timeout_multiplier": 1.0,
+ "max_rpc_timeout_millis": 20000,
+ "total_timeout_millis": 600000
+ }
+ },
+ "methods": {
+ "GetKeywordView": {
+ "timeout_millis": 60000,
+ "retry_codes_name": "idempotent",
+ "retry_params_name": "default"
+ }
+ }
+ }
+ }
+}
diff --git a/src/Google/Ads/GoogleAds/V0/Services/resources/keyword_view_service_descriptor_config.php b/src/Google/Ads/GoogleAds/V0/Services/resources/keyword_view_service_descriptor_config.php
new file mode 100644
index 000000000..7929e97cb
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/resources/keyword_view_service_descriptor_config.php
@@ -0,0 +1,8 @@
+ [
+ 'google.ads.googleads.v0.services.KeywordViewService' => [
+ ],
+ ],
+];
diff --git a/src/Google/Ads/GoogleAds/V0/Services/resources/keyword_view_service_rest_client_config.php b/src/Google/Ads/GoogleAds/V0/Services/resources/keyword_view_service_rest_client_config.php
new file mode 100644
index 000000000..c08835e31
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/resources/keyword_view_service_rest_client_config.php
@@ -0,0 +1,19 @@
+ [
+ 'google.ads.googleads.v0.services.KeywordViewService' => [
+ 'GetKeywordView' => [
+ 'method' => 'get',
+ 'uriTemplate' => '/v0/{resource_name=customers/*/keywordViews/*}',
+ 'placeholders' => [
+ 'resource_name' => [
+ 'getters' => [
+ 'getResourceName',
+ ],
+ ],
+ ],
+ ],
+ ],
+ ],
+];
diff --git a/src/Google/Ads/GoogleAds/V0/Services/resources/recommendation_service_client_config.json b/src/Google/Ads/GoogleAds/V0/Services/resources/recommendation_service_client_config.json
new file mode 100644
index 000000000..b485d748c
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/resources/recommendation_service_client_config.json
@@ -0,0 +1,36 @@
+{
+ "interfaces": {
+ "google.ads.googleads.v0.services.RecommendationService": {
+ "retry_codes": {
+ "idempotent": [
+ "DEADLINE_EXCEEDED",
+ "UNAVAILABLE"
+ ],
+ "non_idempotent": []
+ },
+ "retry_params": {
+ "default": {
+ "initial_retry_delay_millis": 100,
+ "retry_delay_multiplier": 1.3,
+ "max_retry_delay_millis": 60000,
+ "initial_rpc_timeout_millis": 20000,
+ "rpc_timeout_multiplier": 1.0,
+ "max_rpc_timeout_millis": 20000,
+ "total_timeout_millis": 600000
+ }
+ },
+ "methods": {
+ "GetRecommendation": {
+ "timeout_millis": 600000,
+ "retry_codes_name": "idempotent",
+ "retry_params_name": "default"
+ },
+ "ApplyRecommendation": {
+ "timeout_millis": 600000,
+ "retry_codes_name": "non_idempotent",
+ "retry_params_name": "default"
+ }
+ }
+ }
+ }
+}
diff --git a/src/Google/Ads/GoogleAds/V0/Services/resources/recommendation_service_descriptor_config.php b/src/Google/Ads/GoogleAds/V0/Services/resources/recommendation_service_descriptor_config.php
new file mode 100644
index 000000000..41d56edd2
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/resources/recommendation_service_descriptor_config.php
@@ -0,0 +1,8 @@
+ [
+ 'google.ads.googleads.v0.services.RecommendationService' => [
+ ],
+ ],
+];
diff --git a/src/Google/Ads/GoogleAds/V0/Services/resources/recommendation_service_rest_client_config.php b/src/Google/Ads/GoogleAds/V0/Services/resources/recommendation_service_rest_client_config.php
new file mode 100644
index 000000000..b9408e63e
--- /dev/null
+++ b/src/Google/Ads/GoogleAds/V0/Services/resources/recommendation_service_rest_client_config.php
@@ -0,0 +1,31 @@
+ [
+ 'google.ads.googleads.v0.services.RecommendationService' => [
+ 'GetRecommendation' => [
+ 'method' => 'get',
+ 'uriTemplate' => '/v0/{resource_name=customers/*/recommendations/*}',
+ 'placeholders' => [
+ 'resource_name' => [
+ 'getters' => [
+ 'getResourceName',
+ ],
+ ],
+ ],
+ ],
+ 'ApplyRecommendation' => [
+ 'method' => 'post',
+ 'uriTemplate' => '/v0/customers/{customer_id=*}/recommendations:apply',
+ 'body' => '*',
+ 'placeholders' => [
+ 'customer_id' => [
+ 'getters' => [
+ 'getCustomerId',
+ ],
+ ],
+ ],
+ ],
+ ],
+ ],
+];
diff --git a/tests/Google/Ads/GoogleAds/Lib/ConfigurationLoaderTest.php b/tests/Google/Ads/GoogleAds/Lib/ConfigurationLoaderTest.php
new file mode 100644
index 000000000..d5c31c24c
--- /dev/null
+++ b/tests/Google/Ads/GoogleAds/Lib/ConfigurationLoaderTest.php
@@ -0,0 +1,91 @@
+getMockBuilder(EnvironmentalVariables::class)
+ ->getMock();
+ $environmentalVariablesMock
+ ->method('getHome')
+ ->willReturn(ConfigurationLoaderTestProvider::getFilePathToFakeHome());
+ $this->configurationLoader =
+ new ConfigurationLoader($environmentalVariablesMock);
+ }
+
+ /**
+ * @covers \Google\Ads\GoogleAds\Lib\ConfigurationLoader::fromFile
+ */
+ public function testFromFileFileExists()
+ {
+ $config = $this->configurationLoader->fromFile(
+ ConfigurationLoaderTestProvider::getFilePathForTestIniFile()
+ );
+ $this->assertNotNull($config);
+ $this->assertInstanceOf(Configuration::class, $config);
+ }
+ /**
+ * @covers \Google\Ads\GoogleAds\Lib\ConfigurationLoader::fromFile
+ */
+ public function testFromFileFileExistsInHome()
+ {
+ $config = $this->configurationLoader->fromFile('home_google_ads_php.ini');
+ $this->assertNotNull($config);
+ $this->assertInstanceOf(Configuration::class, $config);
+ }
+ /**
+ * @covers \Google\Ads\GoogleAds\Lib\ConfigurationLoader::fromFile
+ * @expectedException \InvalidArgumentException
+ */
+ public function testFromFileFileDoesNotExistAnywhere()
+ {
+ $this->configurationLoader->fromFile('asdf.ini');
+ }
+ /**
+ * @covers \Google\Ads\GoogleAds\Lib\ConfigurationLoader::fromString
+ */
+ public function testFromString()
+ {
+ $iniString = file_get_contents(
+ ConfigurationLoaderTestProvider::getFilePathForTestIniFile()
+ );
+ $config = $this->configurationLoader->fromString($iniString);
+ $this->assertNotNull($config);
+ $this->assertInstanceOf(Configuration::class, $config);
+ }
+}
diff --git a/tests/Google/Ads/GoogleAds/Lib/GoogleAdsClientBuilderTest.php b/tests/Google/Ads/GoogleAds/Lib/GoogleAdsClientBuilderTest.php
new file mode 100644
index 000000000..7d2eae06f
--- /dev/null
+++ b/tests/Google/Ads/GoogleAds/Lib/GoogleAdsClientBuilderTest.php
@@ -0,0 +1,180 @@
+googleAdsClientBuilder = new GoogleAdsClientBuilder();
+ $this->fetchAuthTokenInterfaceMock = $this
+ ->getMockBuilder(FetchAuthTokenInterface::class)
+ ->disableOriginalConstructor()
+ ->getMock();
+ }
+
+ /**
+ * @covers \Google\Ads\GoogleAds\Lib\GoogleAdsClientBuilder::from
+ * @covers \Google\Ads\GoogleAds\Lib\GoogleAdsClientBuilder::build
+ */
+ public function testBuildClientFromConfiguration()
+ {
+ $valueMap = [
+ /* Config name, section, value */
+ ['developerToken', 'GOOGLE_ADS', 'ABcdeFGH93KL-NOPQ_STUv'],
+ ['endpoint', 'GOOGLE_ADS', 'https://abc.xyz:443']
+ ];
+ $configurationMock = $this->getMockBuilder(Configuration::class)
+ ->disableOriginalConstructor()
+ ->getMock();
+ $configurationMock->expects($this->any())
+ ->method('getConfiguration')
+ ->will($this->returnValueMap($valueMap));
+
+ $googleAdsClient = $this->googleAdsClientBuilder
+ ->from($configurationMock)
+ ->withOAuth2Credential($this->fetchAuthTokenInterfaceMock)
+ ->build();
+
+ $this->assertSame(
+ 'ABcdeFGH93KL-NOPQ_STUv',
+ $googleAdsClient->getDeveloperToken()
+ );
+ $this->assertSame('https://abc.xyz:443', $googleAdsClient->getEndpoint());
+ }
+
+ /**
+ * @covers \Google\Ads\GoogleAds\Lib\GoogleAdsClientBuilder::from
+ */
+ public function testBuildFromDefaults()
+ {
+ $valueMap = [
+ ['developerToken', 'GOOGLE_ADS', 'ABcdeFGH93KL-NOPQ_STUv']
+ ];
+ $configurationMock = $this->getMockBuilder(Configuration::class)
+ ->disableOriginalConstructor()
+ ->getMock();
+ $configurationMock->expects($this->any())
+ ->method('getConfiguration')
+ ->will($this->returnValueMap($valueMap));
+
+ $googleAdsClient = $this->googleAdsClientBuilder
+ ->from($configurationMock)
+ ->withOAuth2Credential($this->fetchAuthTokenInterfaceMock)
+ ->build();
+
+ $this->assertSame(
+ 'ABcdeFGH93KL-NOPQ_STUv',
+ $googleAdsClient->getDeveloperToken()
+ );
+ }
+
+ /**
+ * @covers \Google\Ads\GoogleAds\Lib\GoogleAdsClientBuilder::build
+ * @expectedException \InvalidArgumentException
+ */
+ public function testBuildFailsWithoutDeveloperToken()
+ {
+ $this->googleAdsClientBuilder
+ ->withOAuth2Credential($this->fetchAuthTokenInterfaceMock)
+ ->build();
+ }
+
+ /**
+ * @covers \Google\Ads\GoogleAds\Lib\GoogleAdsClientBuilder::build
+ * @expectedException \InvalidArgumentException
+ */
+ public function testBuildFailsWithInvalidEndpointUrl()
+ {
+ $this->googleAdsClientBuilder
+ ->withDeveloperToken('ABcdeFGH93KL-NOPQ_STUv')
+ ->withEndpoint('http://:999')
+ ->withOAuth2Credential($this->fetchAuthTokenInterfaceMock)
+ ->build();
+ }
+
+ /**
+ * @covers \Google\Ads\GoogleAds\Lib\GoogleAdsClientBuilder::build
+ * @expectedException \InvalidArgumentException
+ */
+ public function testBuildFailsWithoutOAuth2Credential()
+ {
+ $this->googleAdsClientBuilder
+ ->withDeveloperToken('ABcdeFGH93KL-NOPQ_STUv')
+ ->build();
+ }
+
+ /**
+ * @covers \Google\Ads\GoogleAds\Lib\GoogleAdsClientBuilder::build
+ */
+ public function testBuild()
+ {
+ $googleAdsClient = $this->googleAdsClientBuilder
+ ->withDeveloperToken('ABcdeFGH93KL-NOPQ_STUv')
+ ->withEndpoint('abc.xyz.com')
+ ->withOAuth2Credential($this->fetchAuthTokenInterfaceMock)
+ ->build();
+
+ $this->assertSame(
+ 'ABcdeFGH93KL-NOPQ_STUv',
+ $googleAdsClient->getDeveloperToken()
+ );
+ $this->assertSame('abc.xyz.com', $googleAdsClient->getEndpoint());
+ $this->assertInstanceOf(
+ FetchAuthTokenInterface::class,
+ $googleAdsClient->getOAuth2Credential()
+ );
+ }
+
+ /**
+ * @covers \Google\Ads\GoogleAds\Lib\GoogleAdsClientBuilder::build
+ */
+ public function testBuildDefaults()
+ {
+ $googleAdsClient = $this->googleAdsClientBuilder
+ ->withDeveloperToken('ABcdeFGH93KL-NOPQ_STUv')
+ ->withOAuth2Credential($this->fetchAuthTokenInterfaceMock)
+ ->build();
+
+ $this->assertSame(
+ 'ABcdeFGH93KL-NOPQ_STUv',
+ $googleAdsClient->getDeveloperToken()
+ );
+ $this->assertInstanceOf(
+ FetchAuthTokenInterface::class,
+ $googleAdsClient->getOAuth2Credential()
+ );
+ }
+}
diff --git a/tests/Google/Ads/GoogleAds/Lib/OAuth2TokenBuilderTest.php b/tests/Google/Ads/GoogleAds/Lib/OAuth2TokenBuilderTest.php
new file mode 100644
index 000000000..e7c5ff4b2
--- /dev/null
+++ b/tests/Google/Ads/GoogleAds/Lib/OAuth2TokenBuilderTest.php
@@ -0,0 +1,68 @@
+oAuth2TokenBuilder = new OAuth2TokenBuilder();
+ }
+
+ /**
+ * @covers \Google\Ads\GoogleAds\Lib\OAuth2TokenBuilder::build
+ */
+ public function testBuildWithWebOrInstalledAppFlow()
+ {
+ $tokenFetcher = $this->oAuth2TokenBuilder
+ ->withClientId('abcxyz-123.apps.googleusercontent.com')
+ ->withClientSecret('ABcXyZ-123abc')
+ ->withRefreshToken('1/AbC-xY123Za-bc')
+ ->build();
+ $this->assertInstanceOf(UserRefreshCredentials::class, $tokenFetcher);
+ }
+
+ /**
+ * @covers \Google\Ads\GoogleAds\Lib\OAuth2TokenBuilder::build
+ * @expectedException \UnexpectedValueException
+ * @expectedExceptionMessageRegExp /clientId.+clientSecret.+refreshToken.+must be set/
+ */
+ public function testBuildFailsWhenMissingRequiredValuesForInstAppOrWebFlow()
+ {
+ $this->oAuth2TokenBuilder
+ ->withClientId('abcxyz-123.apps.googleusercontent.com')
+ ->withClientSecret('ABcXyZ-123abc')
+ ->build();
+ }
+}
diff --git a/tests/Google/Ads/GoogleAds/Util/FieldMasksTests.php b/tests/Google/Ads/GoogleAds/Util/FieldMasksTests.php
new file mode 100644
index 000000000..fc76aab07
--- /dev/null
+++ b/tests/Google/Ads/GoogleAds/Util/FieldMasksTests.php
@@ -0,0 +1,90 @@
+mergeFromJsonString(FieldMasksTestDataProvider::getJsonTestCases());
+ self::$testCases = $testSuite->getTestCases();
+ }
+ return self::$testCases;
+ }
+
+ /**
+ * @dataProvider fieldMaskCompareData
+ */
+ public function testFieldMaskCompare($originalResource, $modifiedResource, $expectedFieldMask)
+ {
+ $actualFieldMask = FieldMasks::compare($originalResource, $modifiedResource);
+ $this->assertEquals($expectedFieldMask, $actualFieldMask);
+ }
+
+ public function fieldMaskCompareData()
+ {
+ $testData = [];
+ foreach (self::loadTestCases() as $testCase) {
+ $testData[] = [
+ $testCase->getOriginalResource(),
+ $testCase->getModifiedResource(),
+ $testCase->getExpectedMask()
+ ];
+ }
+ return $testData;
+ }
+
+ /**
+ * @dataProvider fieldMaskAllSetFieldsOfData
+ */
+ public function testFieldMaskAllSetFieldsOf($resource, $expectedFieldMask)
+ {
+ $actualFieldMask = FieldMasks::allSetFieldsOf($resource);
+ $this->assertEquals($expectedFieldMask, $actualFieldMask);
+ }
+
+ public function fieldMaskAllSetFieldsOfData()
+ {
+ $testData = [];
+ $emptyResource = new Resource();
+ foreach (self::loadTestCases() as $testCase) {
+ $resource = $testCase->getModifiedResource();
+ $testData[] = [$resource, FieldMasks::compare($emptyResource, $resource)];
+ }
+ return $testData;
+ }
+}
diff --git a/tests/Google/Ads/GoogleAds/Util/ResourceNamesTest.php b/tests/Google/Ads/GoogleAds/Util/ResourceNamesTest.php
new file mode 100644
index 000000000..0a73a725d
--- /dev/null
+++ b/tests/Google/Ads/GoogleAds/Util/ResourceNamesTest.php
@@ -0,0 +1,251 @@
+assertEquals(
+ $expectedResourceName,
+ ResourceNames::forAdGroup(self::CUSTOMER_ID, $adGroupId)
+ );
+
+ $names = AdGroupServiceClient::parseName($expectedResourceName);
+ $this->assertEquals(self::CUSTOMER_ID, $names['customer']);
+ $this->assertEquals($adGroupId, $names['ad_group']);
+ }
+
+ /**
+ * @covers \Google\Ads\GoogleAds\Util\ResourceNames::forAdGroupAd()
+ */
+ public function testGetNameForAdGroupAd()
+ {
+ $adGroupId = 111111;
+ $adId = 22222;
+ $expectedResourceName =
+ sprintf('customers/%s/adGroupAds/%s_%s', self::CUSTOMER_ID, $adGroupId, $adId);
+ $this->assertEquals(
+ $expectedResourceName,
+ ResourceNames::forAdGroupAd(self::CUSTOMER_ID, $adGroupId, $adId)
+ );
+
+ $names = AdGroupAdServiceClient::parseName($expectedResourceName);
+ $this->assertEquals(self::CUSTOMER_ID, $names['customer']);
+ $this->assertEquals("{$adGroupId}_{$adId}", $names['ad_group_ad']);
+ }
+
+ /**
+ * @covers \Google\Ads\GoogleAds\Util\ResourceNames::forAdGroupBidModifier()
+ */
+ public function testGetNameForAdGroupBidModifier()
+ {
+ $adGroupId = 111111;
+ $criterionId = 3333333;
+ $expectedResourceName = sprintf(
+ 'customers/%s/adGroupBidModifiers/%s_%s',
+ self::CUSTOMER_ID,
+ $adGroupId,
+ $criterionId
+ );
+ $this->assertEquals(
+ $expectedResourceName,
+ ResourceNames::forAdGroupBidModifier(self::CUSTOMER_ID, $adGroupId, $criterionId)
+ );
+
+ $names = AdGroupBidModifierServiceClient::parseName($expectedResourceName);
+ $this->assertEquals(self::CUSTOMER_ID, $names['customer']);
+ $this->assertEquals("{$adGroupId}_{$criterionId}", $names['ad_group_bid_modifier']);
+ }
+
+ /**
+ * @covers \Google\Ads\GoogleAds\Util\ResourceNames::forAdGroupCriterion()
+ */
+ public function testGetNameForAdGroupCriterion()
+ {
+ $adGroupId = 111111;
+ $criterionId = 3333333;
+ $expectedResourceName = sprintf(
+ 'customers/%s/adGroupCriteria/%s_%s',
+ self::CUSTOMER_ID,
+ $adGroupId,
+ $criterionId
+ );
+ $this->assertEquals(
+ $expectedResourceName,
+ ResourceNames::forAdGroupCriterion(self::CUSTOMER_ID, $adGroupId, $criterionId)
+ );
+
+ $names = AdGroupCriterionServiceClient::parseName($expectedResourceName);
+ $this->assertEquals(self::CUSTOMER_ID, $names['customer']);
+ $this->assertEquals("{$adGroupId}_{$criterionId}", $names['ad_group_criteria']);
+ }
+
+ /**
+ * @covers \Google\Ads\GoogleAds\Util\ResourceNames::forBiddingStrategy()
+ */
+ public function testGetNameForBiddingStrategy()
+ {
+ $biddingStrategyId = 4444444;
+ $expectedResourceName =
+ sprintf('customers/%s/biddingStrategies/%s', self::CUSTOMER_ID, $biddingStrategyId);
+ $this->assertEquals(
+ $expectedResourceName,
+ ResourceNames::forBiddingStrategy(self::CUSTOMER_ID, $biddingStrategyId)
+ );
+
+ $names = BiddingStrategyServiceClient::parseName($expectedResourceName);
+ $this->assertEquals(self::CUSTOMER_ID, $names['customer']);
+ $this->assertEquals($biddingStrategyId, $names['bidding_strategy']);
+ }
+
+ /**
+ * @covers \Google\Ads\GoogleAds\Util\ResourceNames::forCampaignBudget()
+ */
+ public function testGetNameForCampaignBudget()
+ {
+ $budgetId = 555555;
+ $expectedResourceName =
+ sprintf('customers/%s/campaignBudgets/%s', self::CUSTOMER_ID, $budgetId);
+ $this->assertEquals(
+ $expectedResourceName,
+ ResourceNames::forCampaignBudget(self::CUSTOMER_ID, $budgetId)
+ );
+
+ $names = CampaignBudgetServiceClient::parseName($expectedResourceName);
+ $this->assertEquals(self::CUSTOMER_ID, $names['customer']);
+ $this->assertEquals($budgetId, $names['campaign_budget']);
+ }
+
+ /**
+ * @covers \Google\Ads\GoogleAds\Util\ResourceNames::forCampaign()
+ */
+ public function testGetNameForCampaign()
+ {
+ $campaignId = 66666666;
+ $expectedResourceName =
+ sprintf('customers/%s/campaigns/%s', self::CUSTOMER_ID, $campaignId);
+ $this->assertEquals(
+ $expectedResourceName,
+ ResourceNames::forCampaign(self::CUSTOMER_ID, $campaignId)
+ );
+
+ $names = CampaignServiceClient::parseName($expectedResourceName);
+ $this->assertEquals(self::CUSTOMER_ID, $names['customer']);
+ $this->assertEquals($campaignId, $names['campaign']);
+ }
+
+ /**
+ * @covers \Google\Ads\GoogleAds\Util\ResourceNames::forCampaignCriterion()
+ */
+ public function testGetNameForCampaignCriterion()
+ {
+ $campaignId = 66666666;
+ $criterionId = 3333333;
+ $expectedResourceName = sprintf(
+ 'customers/%s/campaignCriteria/%s_%s',
+ self::CUSTOMER_ID,
+ $campaignId,
+ $criterionId
+ );
+ $this->assertEquals(
+ $expectedResourceName,
+ ResourceNames::forCampaignCriterion(self::CUSTOMER_ID, $campaignId, $criterionId)
+ );
+
+ $names = CampaignCriterionServiceClient::parseName($expectedResourceName);
+ $this->assertEquals(self::CUSTOMER_ID, $names['customer']);
+ $this->assertEquals("{$campaignId}_{$criterionId}", $names['campaign_criteria']);
+ }
+
+ /**
+ * @covers \Google\Ads\GoogleAds\Util\ResourceNames::forCampaign()
+ */
+ public function testGetNameForCustomer()
+ {
+ $expectedResourceName = sprintf('customers/%s', self::CUSTOMER_ID);
+ $this->assertEquals(
+ $expectedResourceName,
+ ResourceNames::forCustomer(self::CUSTOMER_ID)
+ );
+
+ $names = CustomerServiceClient::parseName($expectedResourceName);
+ $this->assertEquals(self::CUSTOMER_ID, $names['customer']);
+ }
+
+ /**
+ * @covers \Google\Ads\GoogleAds\Util\ResourceNames::forRecommendation()
+ */
+ public function testGetNameForRecommendation()
+ {
+ $recommendationId = 'a1b2c3d4';
+ $expectedResourceName =
+ sprintf('customers/%s/recommendations/%s', self::CUSTOMER_ID, $recommendationId);
+ $this->assertEquals(
+ $expectedResourceName,
+ ResourceNames::forRecommendation(self::CUSTOMER_ID, $recommendationId)
+ );
+
+ $names = RecommendationServiceClient::parseName($expectedResourceName);
+ $this->assertEquals(self::CUSTOMER_ID, $names['customer']);
+ $this->assertEquals($recommendationId, $names['recommendation']);
+ }
+
+ /**
+ * @covers \Google\Ads\GoogleAds\Util\ResourceNames::forGeoTargetConstant()
+ */
+ public function testGetNameForGeoTargetConstant()
+ {
+ $japanTargetConstantId = 2392;
+ $expectedResourceName = sprintf('geoTargetConstants/%s', $japanTargetConstantId);
+ $this->assertEquals(
+ $expectedResourceName,
+ ResourceNames::forGeoTargetConstant($japanTargetConstantId)
+ );
+
+ $names = GeoTargetConstantServiceClient::parseName($expectedResourceName);
+ $this->assertEquals($japanTargetConstantId, $names['geo_target_constant']);
+ }
+}
diff --git a/tests/Google/Ads/GoogleAds/V0/Services/AdGroupAdServiceClientTest.php b/tests/Google/Ads/GoogleAds/V0/Services/AdGroupAdServiceClientTest.php
new file mode 100644
index 000000000..eff0e00c6
--- /dev/null
+++ b/tests/Google/Ads/GoogleAds/V0/Services/AdGroupAdServiceClientTest.php
@@ -0,0 +1,212 @@
+ $this->getMockBuilder(CredentialsWrapper::class)
+ ->disableOriginalConstructor()
+ ->getMock(),
+ ];
+
+ return new AdGroupAdServiceClient($options);
+ }
+
+ /**
+ * @test
+ */
+ public function getAdGroupAdTest()
+ {
+ $transport = $this->createTransport();
+ $client = $this->createClient(['transport' => $transport]);
+
+ $this->assertTrue($transport->isExhausted());
+
+ // Mock response
+ $resourceName2 = 'resourceName2625949903';
+ $expectedResponse = new AdGroupAd();
+ $expectedResponse->setResourceName($resourceName2);
+ $transport->addResponse($expectedResponse);
+
+ // Mock request
+ $formattedResourceName = $client->adGroupAdName('[CUSTOMER]', '[AD_GROUP_AD]');
+
+ $response = $client->getAdGroupAd($formattedResourceName);
+ $this->assertEquals($expectedResponse, $response);
+ $actualRequests = $transport->popReceivedCalls();
+ $this->assertSame(1, count($actualRequests));
+ $actualFuncCall = $actualRequests[0]->getFuncCall();
+ $actualRequestObject = $actualRequests[0]->getRequestObject();
+ $this->assertSame('/google.ads.googleads.v0.services.AdGroupAdService/GetAdGroupAd', $actualFuncCall);
+
+ $actualValue = $actualRequestObject->getResourceName();
+
+ $this->assertProtobufEquals($formattedResourceName, $actualValue);
+
+ $this->assertTrue($transport->isExhausted());
+ }
+
+ /**
+ * @test
+ */
+ public function getAdGroupAdExceptionTest()
+ {
+ $transport = $this->createTransport();
+ $client = $this->createClient(['transport' => $transport]);
+
+ $this->assertTrue($transport->isExhausted());
+
+ $status = new stdClass();
+ $status->code = Code::DATA_LOSS;
+ $status->details = 'internal error';
+
+ $expectedExceptionMessage = json_encode([
+ 'message' => 'internal error',
+ 'code' => Code::DATA_LOSS,
+ 'status' => 'DATA_LOSS',
+ 'details' => [],
+ ], JSON_PRETTY_PRINT);
+ $transport->addResponse(null, $status);
+
+ // Mock request
+ $formattedResourceName = $client->adGroupAdName('[CUSTOMER]', '[AD_GROUP_AD]');
+
+ try {
+ $client->getAdGroupAd($formattedResourceName);
+ // If the $client method call did not throw, fail the test
+ $this->fail('Expected an ApiException, but no exception was thrown.');
+ } catch (ApiException $ex) {
+ $this->assertEquals($status->code, $ex->getCode());
+ $this->assertEquals($expectedExceptionMessage, $ex->getMessage());
+ }
+
+ // Call popReceivedCalls to ensure the stub is exhausted
+ $transport->popReceivedCalls();
+ $this->assertTrue($transport->isExhausted());
+ }
+
+ /**
+ * @test
+ */
+ public function mutateAdGroupAdsTest()
+ {
+ $transport = $this->createTransport();
+ $client = $this->createClient(['transport' => $transport]);
+
+ $this->assertTrue($transport->isExhausted());
+
+ // Mock response
+ $expectedResponse = new MutateAdGroupAdsResponse();
+ $transport->addResponse($expectedResponse);
+
+ // Mock request
+ $customerId = 'customerId-1772061412';
+ $operations = [];
+
+ $response = $client->mutateAdGroupAds($customerId, $operations);
+ $this->assertEquals($expectedResponse, $response);
+ $actualRequests = $transport->popReceivedCalls();
+ $this->assertSame(1, count($actualRequests));
+ $actualFuncCall = $actualRequests[0]->getFuncCall();
+ $actualRequestObject = $actualRequests[0]->getRequestObject();
+ $this->assertSame('/google.ads.googleads.v0.services.AdGroupAdService/MutateAdGroupAds', $actualFuncCall);
+
+ $actualValue = $actualRequestObject->getCustomerId();
+
+ $this->assertProtobufEquals($customerId, $actualValue);
+ $actualValue = $actualRequestObject->getOperations();
+
+ $this->assertProtobufEquals($operations, $actualValue);
+
+ $this->assertTrue($transport->isExhausted());
+ }
+
+ /**
+ * @test
+ */
+ public function mutateAdGroupAdsExceptionTest()
+ {
+ $transport = $this->createTransport();
+ $client = $this->createClient(['transport' => $transport]);
+
+ $this->assertTrue($transport->isExhausted());
+
+ $status = new stdClass();
+ $status->code = Code::DATA_LOSS;
+ $status->details = 'internal error';
+
+ $expectedExceptionMessage = json_encode([
+ 'message' => 'internal error',
+ 'code' => Code::DATA_LOSS,
+ 'status' => 'DATA_LOSS',
+ 'details' => [],
+ ], JSON_PRETTY_PRINT);
+ $transport->addResponse(null, $status);
+
+ // Mock request
+ $customerId = 'customerId-1772061412';
+ $operations = [];
+
+ try {
+ $client->mutateAdGroupAds($customerId, $operations);
+ // If the $client method call did not throw, fail the test
+ $this->fail('Expected an ApiException, but no exception was thrown.');
+ } catch (ApiException $ex) {
+ $this->assertEquals($status->code, $ex->getCode());
+ $this->assertEquals($expectedExceptionMessage, $ex->getMessage());
+ }
+
+ // Call popReceivedCalls to ensure the stub is exhausted
+ $transport->popReceivedCalls();
+ $this->assertTrue($transport->isExhausted());
+ }
+}
diff --git a/tests/Google/Ads/GoogleAds/V0/Services/AdGroupBidModifierServiceClientTest.php b/tests/Google/Ads/GoogleAds/V0/Services/AdGroupBidModifierServiceClientTest.php
new file mode 100644
index 000000000..7875332bb
--- /dev/null
+++ b/tests/Google/Ads/GoogleAds/V0/Services/AdGroupBidModifierServiceClientTest.php
@@ -0,0 +1,212 @@
+ $this->getMockBuilder(CredentialsWrapper::class)
+ ->disableOriginalConstructor()
+ ->getMock(),
+ ];
+
+ return new AdGroupBidModifierServiceClient($options);
+ }
+
+ /**
+ * @test
+ */
+ public function getAdGroupBidModifierTest()
+ {
+ $transport = $this->createTransport();
+ $client = $this->createClient(['transport' => $transport]);
+
+ $this->assertTrue($transport->isExhausted());
+
+ // Mock response
+ $resourceName2 = 'resourceName2625949903';
+ $expectedResponse = new AdGroupBidModifier();
+ $expectedResponse->setResourceName($resourceName2);
+ $transport->addResponse($expectedResponse);
+
+ // Mock request
+ $formattedResourceName = $client->adGroupBidModifierName('[CUSTOMER]', '[AD_GROUP_BID_MODIFIER]');
+
+ $response = $client->getAdGroupBidModifier($formattedResourceName);
+ $this->assertEquals($expectedResponse, $response);
+ $actualRequests = $transport->popReceivedCalls();
+ $this->assertSame(1, count($actualRequests));
+ $actualFuncCall = $actualRequests[0]->getFuncCall();
+ $actualRequestObject = $actualRequests[0]->getRequestObject();
+ $this->assertSame('/google.ads.googleads.v0.services.AdGroupBidModifierService/GetAdGroupBidModifier', $actualFuncCall);
+
+ $actualValue = $actualRequestObject->getResourceName();
+
+ $this->assertProtobufEquals($formattedResourceName, $actualValue);
+
+ $this->assertTrue($transport->isExhausted());
+ }
+
+ /**
+ * @test
+ */
+ public function getAdGroupBidModifierExceptionTest()
+ {
+ $transport = $this->createTransport();
+ $client = $this->createClient(['transport' => $transport]);
+
+ $this->assertTrue($transport->isExhausted());
+
+ $status = new stdClass();
+ $status->code = Code::DATA_LOSS;
+ $status->details = 'internal error';
+
+ $expectedExceptionMessage = json_encode([
+ 'message' => 'internal error',
+ 'code' => Code::DATA_LOSS,
+ 'status' => 'DATA_LOSS',
+ 'details' => [],
+ ], JSON_PRETTY_PRINT);
+ $transport->addResponse(null, $status);
+
+ // Mock request
+ $formattedResourceName = $client->adGroupBidModifierName('[CUSTOMER]', '[AD_GROUP_BID_MODIFIER]');
+
+ try {
+ $client->getAdGroupBidModifier($formattedResourceName);
+ // If the $client method call did not throw, fail the test
+ $this->fail('Expected an ApiException, but no exception was thrown.');
+ } catch (ApiException $ex) {
+ $this->assertEquals($status->code, $ex->getCode());
+ $this->assertEquals($expectedExceptionMessage, $ex->getMessage());
+ }
+
+ // Call popReceivedCalls to ensure the stub is exhausted
+ $transport->popReceivedCalls();
+ $this->assertTrue($transport->isExhausted());
+ }
+
+ /**
+ * @test
+ */
+ public function mutateAdGroupBidModifiersTest()
+ {
+ $transport = $this->createTransport();
+ $client = $this->createClient(['transport' => $transport]);
+
+ $this->assertTrue($transport->isExhausted());
+
+ // Mock response
+ $expectedResponse = new MutateAdGroupBidModifiersResponse();
+ $transport->addResponse($expectedResponse);
+
+ // Mock request
+ $customerId = 'customerId-1772061412';
+ $operations = [];
+
+ $response = $client->mutateAdGroupBidModifiers($customerId, $operations);
+ $this->assertEquals($expectedResponse, $response);
+ $actualRequests = $transport->popReceivedCalls();
+ $this->assertSame(1, count($actualRequests));
+ $actualFuncCall = $actualRequests[0]->getFuncCall();
+ $actualRequestObject = $actualRequests[0]->getRequestObject();
+ $this->assertSame('/google.ads.googleads.v0.services.AdGroupBidModifierService/MutateAdGroupBidModifiers', $actualFuncCall);
+
+ $actualValue = $actualRequestObject->getCustomerId();
+
+ $this->assertProtobufEquals($customerId, $actualValue);
+ $actualValue = $actualRequestObject->getOperations();
+
+ $this->assertProtobufEquals($operations, $actualValue);
+
+ $this->assertTrue($transport->isExhausted());
+ }
+
+ /**
+ * @test
+ */
+ public function mutateAdGroupBidModifiersExceptionTest()
+ {
+ $transport = $this->createTransport();
+ $client = $this->createClient(['transport' => $transport]);
+
+ $this->assertTrue($transport->isExhausted());
+
+ $status = new stdClass();
+ $status->code = Code::DATA_LOSS;
+ $status->details = 'internal error';
+
+ $expectedExceptionMessage = json_encode([
+ 'message' => 'internal error',
+ 'code' => Code::DATA_LOSS,
+ 'status' => 'DATA_LOSS',
+ 'details' => [],
+ ], JSON_PRETTY_PRINT);
+ $transport->addResponse(null, $status);
+
+ // Mock request
+ $customerId = 'customerId-1772061412';
+ $operations = [];
+
+ try {
+ $client->mutateAdGroupBidModifiers($customerId, $operations);
+ // If the $client method call did not throw, fail the test
+ $this->fail('Expected an ApiException, but no exception was thrown.');
+ } catch (ApiException $ex) {
+ $this->assertEquals($status->code, $ex->getCode());
+ $this->assertEquals($expectedExceptionMessage, $ex->getMessage());
+ }
+
+ // Call popReceivedCalls to ensure the stub is exhausted
+ $transport->popReceivedCalls();
+ $this->assertTrue($transport->isExhausted());
+ }
+}
diff --git a/tests/Google/Ads/GoogleAds/V0/Services/AdGroupCriterionServiceClientTest.php b/tests/Google/Ads/GoogleAds/V0/Services/AdGroupCriterionServiceClientTest.php
new file mode 100644
index 000000000..0bf35252e
--- /dev/null
+++ b/tests/Google/Ads/GoogleAds/V0/Services/AdGroupCriterionServiceClientTest.php
@@ -0,0 +1,212 @@
+ $this->getMockBuilder(CredentialsWrapper::class)
+ ->disableOriginalConstructor()
+ ->getMock(),
+ ];
+
+ return new AdGroupCriterionServiceClient($options);
+ }
+
+ /**
+ * @test
+ */
+ public function getAdGroupCriterionTest()
+ {
+ $transport = $this->createTransport();
+ $client = $this->createClient(['transport' => $transport]);
+
+ $this->assertTrue($transport->isExhausted());
+
+ // Mock response
+ $resourceName2 = 'resourceName2625949903';
+ $expectedResponse = new AdGroupCriterion();
+ $expectedResponse->setResourceName($resourceName2);
+ $transport->addResponse($expectedResponse);
+
+ // Mock request
+ $formattedResourceName = $client->adGroupCriteriaName('[CUSTOMER]', '[AD_GROUP_CRITERIA]');
+
+ $response = $client->getAdGroupCriterion($formattedResourceName);
+ $this->assertEquals($expectedResponse, $response);
+ $actualRequests = $transport->popReceivedCalls();
+ $this->assertSame(1, count($actualRequests));
+ $actualFuncCall = $actualRequests[0]->getFuncCall();
+ $actualRequestObject = $actualRequests[0]->getRequestObject();
+ $this->assertSame('/google.ads.googleads.v0.services.AdGroupCriterionService/GetAdGroupCriterion', $actualFuncCall);
+
+ $actualValue = $actualRequestObject->getResourceName();
+
+ $this->assertProtobufEquals($formattedResourceName, $actualValue);
+
+ $this->assertTrue($transport->isExhausted());
+ }
+
+ /**
+ * @test
+ */
+ public function getAdGroupCriterionExceptionTest()
+ {
+ $transport = $this->createTransport();
+ $client = $this->createClient(['transport' => $transport]);
+
+ $this->assertTrue($transport->isExhausted());
+
+ $status = new stdClass();
+ $status->code = Code::DATA_LOSS;
+ $status->details = 'internal error';
+
+ $expectedExceptionMessage = json_encode([
+ 'message' => 'internal error',
+ 'code' => Code::DATA_LOSS,
+ 'status' => 'DATA_LOSS',
+ 'details' => [],
+ ], JSON_PRETTY_PRINT);
+ $transport->addResponse(null, $status);
+
+ // Mock request
+ $formattedResourceName = $client->adGroupCriteriaName('[CUSTOMER]', '[AD_GROUP_CRITERIA]');
+
+ try {
+ $client->getAdGroupCriterion($formattedResourceName);
+ // If the $client method call did not throw, fail the test
+ $this->fail('Expected an ApiException, but no exception was thrown.');
+ } catch (ApiException $ex) {
+ $this->assertEquals($status->code, $ex->getCode());
+ $this->assertEquals($expectedExceptionMessage, $ex->getMessage());
+ }
+
+ // Call popReceivedCalls to ensure the stub is exhausted
+ $transport->popReceivedCalls();
+ $this->assertTrue($transport->isExhausted());
+ }
+
+ /**
+ * @test
+ */
+ public function mutateAdGroupCriteriaTest()
+ {
+ $transport = $this->createTransport();
+ $client = $this->createClient(['transport' => $transport]);
+
+ $this->assertTrue($transport->isExhausted());
+
+ // Mock response
+ $expectedResponse = new MutateAdGroupCriteriaResponse();
+ $transport->addResponse($expectedResponse);
+
+ // Mock request
+ $customerId = 'customerId-1772061412';
+ $operations = [];
+
+ $response = $client->mutateAdGroupCriteria($customerId, $operations);
+ $this->assertEquals($expectedResponse, $response);
+ $actualRequests = $transport->popReceivedCalls();
+ $this->assertSame(1, count($actualRequests));
+ $actualFuncCall = $actualRequests[0]->getFuncCall();
+ $actualRequestObject = $actualRequests[0]->getRequestObject();
+ $this->assertSame('/google.ads.googleads.v0.services.AdGroupCriterionService/MutateAdGroupCriteria', $actualFuncCall);
+
+ $actualValue = $actualRequestObject->getCustomerId();
+
+ $this->assertProtobufEquals($customerId, $actualValue);
+ $actualValue = $actualRequestObject->getOperations();
+
+ $this->assertProtobufEquals($operations, $actualValue);
+
+ $this->assertTrue($transport->isExhausted());
+ }
+
+ /**
+ * @test
+ */
+ public function mutateAdGroupCriteriaExceptionTest()
+ {
+ $transport = $this->createTransport();
+ $client = $this->createClient(['transport' => $transport]);
+
+ $this->assertTrue($transport->isExhausted());
+
+ $status = new stdClass();
+ $status->code = Code::DATA_LOSS;
+ $status->details = 'internal error';
+
+ $expectedExceptionMessage = json_encode([
+ 'message' => 'internal error',
+ 'code' => Code::DATA_LOSS,
+ 'status' => 'DATA_LOSS',
+ 'details' => [],
+ ], JSON_PRETTY_PRINT);
+ $transport->addResponse(null, $status);
+
+ // Mock request
+ $customerId = 'customerId-1772061412';
+ $operations = [];
+
+ try {
+ $client->mutateAdGroupCriteria($customerId, $operations);
+ // If the $client method call did not throw, fail the test
+ $this->fail('Expected an ApiException, but no exception was thrown.');
+ } catch (ApiException $ex) {
+ $this->assertEquals($status->code, $ex->getCode());
+ $this->assertEquals($expectedExceptionMessage, $ex->getMessage());
+ }
+
+ // Call popReceivedCalls to ensure the stub is exhausted
+ $transport->popReceivedCalls();
+ $this->assertTrue($transport->isExhausted());
+ }
+}
diff --git a/tests/Google/Ads/GoogleAds/V0/Services/AdGroupServiceClientTest.php b/tests/Google/Ads/GoogleAds/V0/Services/AdGroupServiceClientTest.php
new file mode 100644
index 000000000..603027152
--- /dev/null
+++ b/tests/Google/Ads/GoogleAds/V0/Services/AdGroupServiceClientTest.php
@@ -0,0 +1,212 @@
+ $this->getMockBuilder(CredentialsWrapper::class)
+ ->disableOriginalConstructor()
+ ->getMock(),
+ ];
+
+ return new AdGroupServiceClient($options);
+ }
+
+ /**
+ * @test
+ */
+ public function getAdGroupTest()
+ {
+ $transport = $this->createTransport();
+ $client = $this->createClient(['transport' => $transport]);
+
+ $this->assertTrue($transport->isExhausted());
+
+ // Mock response
+ $resourceName2 = 'resourceName2625949903';
+ $expectedResponse = new AdGroup();
+ $expectedResponse->setResourceName($resourceName2);
+ $transport->addResponse($expectedResponse);
+
+ // Mock request
+ $formattedResourceName = $client->adGroupName('[CUSTOMER]', '[AD_GROUP]');
+
+ $response = $client->getAdGroup($formattedResourceName);
+ $this->assertEquals($expectedResponse, $response);
+ $actualRequests = $transport->popReceivedCalls();
+ $this->assertSame(1, count($actualRequests));
+ $actualFuncCall = $actualRequests[0]->getFuncCall();
+ $actualRequestObject = $actualRequests[0]->getRequestObject();
+ $this->assertSame('/google.ads.googleads.v0.services.AdGroupService/GetAdGroup', $actualFuncCall);
+
+ $actualValue = $actualRequestObject->getResourceName();
+
+ $this->assertProtobufEquals($formattedResourceName, $actualValue);
+
+ $this->assertTrue($transport->isExhausted());
+ }
+
+ /**
+ * @test
+ */
+ public function getAdGroupExceptionTest()
+ {
+ $transport = $this->createTransport();
+ $client = $this->createClient(['transport' => $transport]);
+
+ $this->assertTrue($transport->isExhausted());
+
+ $status = new stdClass();
+ $status->code = Code::DATA_LOSS;
+ $status->details = 'internal error';
+
+ $expectedExceptionMessage = json_encode([
+ 'message' => 'internal error',
+ 'code' => Code::DATA_LOSS,
+ 'status' => 'DATA_LOSS',
+ 'details' => [],
+ ], JSON_PRETTY_PRINT);
+ $transport->addResponse(null, $status);
+
+ // Mock request
+ $formattedResourceName = $client->adGroupName('[CUSTOMER]', '[AD_GROUP]');
+
+ try {
+ $client->getAdGroup($formattedResourceName);
+ // If the $client method call did not throw, fail the test
+ $this->fail('Expected an ApiException, but no exception was thrown.');
+ } catch (ApiException $ex) {
+ $this->assertEquals($status->code, $ex->getCode());
+ $this->assertEquals($expectedExceptionMessage, $ex->getMessage());
+ }
+
+ // Call popReceivedCalls to ensure the stub is exhausted
+ $transport->popReceivedCalls();
+ $this->assertTrue($transport->isExhausted());
+ }
+
+ /**
+ * @test
+ */
+ public function mutateAdGroupsTest()
+ {
+ $transport = $this->createTransport();
+ $client = $this->createClient(['transport' => $transport]);
+
+ $this->assertTrue($transport->isExhausted());
+
+ // Mock response
+ $expectedResponse = new MutateAdGroupsResponse();
+ $transport->addResponse($expectedResponse);
+
+ // Mock request
+ $customerId = 'customerId-1772061412';
+ $operations = [];
+
+ $response = $client->mutateAdGroups($customerId, $operations);
+ $this->assertEquals($expectedResponse, $response);
+ $actualRequests = $transport->popReceivedCalls();
+ $this->assertSame(1, count($actualRequests));
+ $actualFuncCall = $actualRequests[0]->getFuncCall();
+ $actualRequestObject = $actualRequests[0]->getRequestObject();
+ $this->assertSame('/google.ads.googleads.v0.services.AdGroupService/MutateAdGroups', $actualFuncCall);
+
+ $actualValue = $actualRequestObject->getCustomerId();
+
+ $this->assertProtobufEquals($customerId, $actualValue);
+ $actualValue = $actualRequestObject->getOperations();
+
+ $this->assertProtobufEquals($operations, $actualValue);
+
+ $this->assertTrue($transport->isExhausted());
+ }
+
+ /**
+ * @test
+ */
+ public function mutateAdGroupsExceptionTest()
+ {
+ $transport = $this->createTransport();
+ $client = $this->createClient(['transport' => $transport]);
+
+ $this->assertTrue($transport->isExhausted());
+
+ $status = new stdClass();
+ $status->code = Code::DATA_LOSS;
+ $status->details = 'internal error';
+
+ $expectedExceptionMessage = json_encode([
+ 'message' => 'internal error',
+ 'code' => Code::DATA_LOSS,
+ 'status' => 'DATA_LOSS',
+ 'details' => [],
+ ], JSON_PRETTY_PRINT);
+ $transport->addResponse(null, $status);
+
+ // Mock request
+ $customerId = 'customerId-1772061412';
+ $operations = [];
+
+ try {
+ $client->mutateAdGroups($customerId, $operations);
+ // If the $client method call did not throw, fail the test
+ $this->fail('Expected an ApiException, but no exception was thrown.');
+ } catch (ApiException $ex) {
+ $this->assertEquals($status->code, $ex->getCode());
+ $this->assertEquals($expectedExceptionMessage, $ex->getMessage());
+ }
+
+ // Call popReceivedCalls to ensure the stub is exhausted
+ $transport->popReceivedCalls();
+ $this->assertTrue($transport->isExhausted());
+ }
+}
diff --git a/tests/Google/Ads/GoogleAds/V0/Services/BiddingStrategyServiceClientTest.php b/tests/Google/Ads/GoogleAds/V0/Services/BiddingStrategyServiceClientTest.php
new file mode 100644
index 000000000..427ce44d5
--- /dev/null
+++ b/tests/Google/Ads/GoogleAds/V0/Services/BiddingStrategyServiceClientTest.php
@@ -0,0 +1,212 @@
+ $this->getMockBuilder(CredentialsWrapper::class)
+ ->disableOriginalConstructor()
+ ->getMock(),
+ ];
+
+ return new BiddingStrategyServiceClient($options);
+ }
+
+ /**
+ * @test
+ */
+ public function getBiddingStrategyTest()
+ {
+ $transport = $this->createTransport();
+ $client = $this->createClient(['transport' => $transport]);
+
+ $this->assertTrue($transport->isExhausted());
+
+ // Mock response
+ $resourceName2 = 'resourceName2625949903';
+ $expectedResponse = new BiddingStrategy();
+ $expectedResponse->setResourceName($resourceName2);
+ $transport->addResponse($expectedResponse);
+
+ // Mock request
+ $formattedResourceName = $client->biddingStrategyName('[CUSTOMER]', '[BIDDING_STRATEGY]');
+
+ $response = $client->getBiddingStrategy($formattedResourceName);
+ $this->assertEquals($expectedResponse, $response);
+ $actualRequests = $transport->popReceivedCalls();
+ $this->assertSame(1, count($actualRequests));
+ $actualFuncCall = $actualRequests[0]->getFuncCall();
+ $actualRequestObject = $actualRequests[0]->getRequestObject();
+ $this->assertSame('/google.ads.googleads.v0.services.BiddingStrategyService/GetBiddingStrategy', $actualFuncCall);
+
+ $actualValue = $actualRequestObject->getResourceName();
+
+ $this->assertProtobufEquals($formattedResourceName, $actualValue);
+
+ $this->assertTrue($transport->isExhausted());
+ }
+
+ /**
+ * @test
+ */
+ public function getBiddingStrategyExceptionTest()
+ {
+ $transport = $this->createTransport();
+ $client = $this->createClient(['transport' => $transport]);
+
+ $this->assertTrue($transport->isExhausted());
+
+ $status = new stdClass();
+ $status->code = Code::DATA_LOSS;
+ $status->details = 'internal error';
+
+ $expectedExceptionMessage = json_encode([
+ 'message' => 'internal error',
+ 'code' => Code::DATA_LOSS,
+ 'status' => 'DATA_LOSS',
+ 'details' => [],
+ ], JSON_PRETTY_PRINT);
+ $transport->addResponse(null, $status);
+
+ // Mock request
+ $formattedResourceName = $client->biddingStrategyName('[CUSTOMER]', '[BIDDING_STRATEGY]');
+
+ try {
+ $client->getBiddingStrategy($formattedResourceName);
+ // If the $client method call did not throw, fail the test
+ $this->fail('Expected an ApiException, but no exception was thrown.');
+ } catch (ApiException $ex) {
+ $this->assertEquals($status->code, $ex->getCode());
+ $this->assertEquals($expectedExceptionMessage, $ex->getMessage());
+ }
+
+ // Call popReceivedCalls to ensure the stub is exhausted
+ $transport->popReceivedCalls();
+ $this->assertTrue($transport->isExhausted());
+ }
+
+ /**
+ * @test
+ */
+ public function mutateBiddingStrategiesTest()
+ {
+ $transport = $this->createTransport();
+ $client = $this->createClient(['transport' => $transport]);
+
+ $this->assertTrue($transport->isExhausted());
+
+ // Mock response
+ $expectedResponse = new MutateBiddingStrategiesResponse();
+ $transport->addResponse($expectedResponse);
+
+ // Mock request
+ $customerId = 'customerId-1772061412';
+ $operations = [];
+
+ $response = $client->mutateBiddingStrategies($customerId, $operations);
+ $this->assertEquals($expectedResponse, $response);
+ $actualRequests = $transport->popReceivedCalls();
+ $this->assertSame(1, count($actualRequests));
+ $actualFuncCall = $actualRequests[0]->getFuncCall();
+ $actualRequestObject = $actualRequests[0]->getRequestObject();
+ $this->assertSame('/google.ads.googleads.v0.services.BiddingStrategyService/MutateBiddingStrategies', $actualFuncCall);
+
+ $actualValue = $actualRequestObject->getCustomerId();
+
+ $this->assertProtobufEquals($customerId, $actualValue);
+ $actualValue = $actualRequestObject->getOperations();
+
+ $this->assertProtobufEquals($operations, $actualValue);
+
+ $this->assertTrue($transport->isExhausted());
+ }
+
+ /**
+ * @test
+ */
+ public function mutateBiddingStrategiesExceptionTest()
+ {
+ $transport = $this->createTransport();
+ $client = $this->createClient(['transport' => $transport]);
+
+ $this->assertTrue($transport->isExhausted());
+
+ $status = new stdClass();
+ $status->code = Code::DATA_LOSS;
+ $status->details = 'internal error';
+
+ $expectedExceptionMessage = json_encode([
+ 'message' => 'internal error',
+ 'code' => Code::DATA_LOSS,
+ 'status' => 'DATA_LOSS',
+ 'details' => [],
+ ], JSON_PRETTY_PRINT);
+ $transport->addResponse(null, $status);
+
+ // Mock request
+ $customerId = 'customerId-1772061412';
+ $operations = [];
+
+ try {
+ $client->mutateBiddingStrategies($customerId, $operations);
+ // If the $client method call did not throw, fail the test
+ $this->fail('Expected an ApiException, but no exception was thrown.');
+ } catch (ApiException $ex) {
+ $this->assertEquals($status->code, $ex->getCode());
+ $this->assertEquals($expectedExceptionMessage, $ex->getMessage());
+ }
+
+ // Call popReceivedCalls to ensure the stub is exhausted
+ $transport->popReceivedCalls();
+ $this->assertTrue($transport->isExhausted());
+ }
+}
diff --git a/tests/Google/Ads/GoogleAds/V0/Services/CampaignBudgetServiceClientTest.php b/tests/Google/Ads/GoogleAds/V0/Services/CampaignBudgetServiceClientTest.php
new file mode 100644
index 000000000..83f830246
--- /dev/null
+++ b/tests/Google/Ads/GoogleAds/V0/Services/CampaignBudgetServiceClientTest.php
@@ -0,0 +1,212 @@
+ $this->getMockBuilder(CredentialsWrapper::class)
+ ->disableOriginalConstructor()
+ ->getMock(),
+ ];
+
+ return new CampaignBudgetServiceClient($options);
+ }
+
+ /**
+ * @test
+ */
+ public function getCampaignBudgetTest()
+ {
+ $transport = $this->createTransport();
+ $client = $this->createClient(['transport' => $transport]);
+
+ $this->assertTrue($transport->isExhausted());
+
+ // Mock response
+ $resourceName2 = 'resourceName2625949903';
+ $expectedResponse = new CampaignBudget();
+ $expectedResponse->setResourceName($resourceName2);
+ $transport->addResponse($expectedResponse);
+
+ // Mock request
+ $formattedResourceName = $client->campaignBudgetName('[CUSTOMER]', '[CAMPAIGN_BUDGET]');
+
+ $response = $client->getCampaignBudget($formattedResourceName);
+ $this->assertEquals($expectedResponse, $response);
+ $actualRequests = $transport->popReceivedCalls();
+ $this->assertSame(1, count($actualRequests));
+ $actualFuncCall = $actualRequests[0]->getFuncCall();
+ $actualRequestObject = $actualRequests[0]->getRequestObject();
+ $this->assertSame('/google.ads.googleads.v0.services.CampaignBudgetService/GetCampaignBudget', $actualFuncCall);
+
+ $actualValue = $actualRequestObject->getResourceName();
+
+ $this->assertProtobufEquals($formattedResourceName, $actualValue);
+
+ $this->assertTrue($transport->isExhausted());
+ }
+
+ /**
+ * @test
+ */
+ public function getCampaignBudgetExceptionTest()
+ {
+ $transport = $this->createTransport();
+ $client = $this->createClient(['transport' => $transport]);
+
+ $this->assertTrue($transport->isExhausted());
+
+ $status = new stdClass();
+ $status->code = Code::DATA_LOSS;
+ $status->details = 'internal error';
+
+ $expectedExceptionMessage = json_encode([
+ 'message' => 'internal error',
+ 'code' => Code::DATA_LOSS,
+ 'status' => 'DATA_LOSS',
+ 'details' => [],
+ ], JSON_PRETTY_PRINT);
+ $transport->addResponse(null, $status);
+
+ // Mock request
+ $formattedResourceName = $client->campaignBudgetName('[CUSTOMER]', '[CAMPAIGN_BUDGET]');
+
+ try {
+ $client->getCampaignBudget($formattedResourceName);
+ // If the $client method call did not throw, fail the test
+ $this->fail('Expected an ApiException, but no exception was thrown.');
+ } catch (ApiException $ex) {
+ $this->assertEquals($status->code, $ex->getCode());
+ $this->assertEquals($expectedExceptionMessage, $ex->getMessage());
+ }
+
+ // Call popReceivedCalls to ensure the stub is exhausted
+ $transport->popReceivedCalls();
+ $this->assertTrue($transport->isExhausted());
+ }
+
+ /**
+ * @test
+ */
+ public function mutateCampaignBudgetsTest()
+ {
+ $transport = $this->createTransport();
+ $client = $this->createClient(['transport' => $transport]);
+
+ $this->assertTrue($transport->isExhausted());
+
+ // Mock response
+ $expectedResponse = new MutateCampaignBudgetsResponse();
+ $transport->addResponse($expectedResponse);
+
+ // Mock request
+ $customerId = 'customerId-1772061412';
+ $operations = [];
+
+ $response = $client->mutateCampaignBudgets($customerId, $operations);
+ $this->assertEquals($expectedResponse, $response);
+ $actualRequests = $transport->popReceivedCalls();
+ $this->assertSame(1, count($actualRequests));
+ $actualFuncCall = $actualRequests[0]->getFuncCall();
+ $actualRequestObject = $actualRequests[0]->getRequestObject();
+ $this->assertSame('/google.ads.googleads.v0.services.CampaignBudgetService/MutateCampaignBudgets', $actualFuncCall);
+
+ $actualValue = $actualRequestObject->getCustomerId();
+
+ $this->assertProtobufEquals($customerId, $actualValue);
+ $actualValue = $actualRequestObject->getOperations();
+
+ $this->assertProtobufEquals($operations, $actualValue);
+
+ $this->assertTrue($transport->isExhausted());
+ }
+
+ /**
+ * @test
+ */
+ public function mutateCampaignBudgetsExceptionTest()
+ {
+ $transport = $this->createTransport();
+ $client = $this->createClient(['transport' => $transport]);
+
+ $this->assertTrue($transport->isExhausted());
+
+ $status = new stdClass();
+ $status->code = Code::DATA_LOSS;
+ $status->details = 'internal error';
+
+ $expectedExceptionMessage = json_encode([
+ 'message' => 'internal error',
+ 'code' => Code::DATA_LOSS,
+ 'status' => 'DATA_LOSS',
+ 'details' => [],
+ ], JSON_PRETTY_PRINT);
+ $transport->addResponse(null, $status);
+
+ // Mock request
+ $customerId = 'customerId-1772061412';
+ $operations = [];
+
+ try {
+ $client->mutateCampaignBudgets($customerId, $operations);
+ // If the $client method call did not throw, fail the test
+ $this->fail('Expected an ApiException, but no exception was thrown.');
+ } catch (ApiException $ex) {
+ $this->assertEquals($status->code, $ex->getCode());
+ $this->assertEquals($expectedExceptionMessage, $ex->getMessage());
+ }
+
+ // Call popReceivedCalls to ensure the stub is exhausted
+ $transport->popReceivedCalls();
+ $this->assertTrue($transport->isExhausted());
+ }
+}
diff --git a/tests/Google/Ads/GoogleAds/V0/Services/CampaignCriterionServiceClientTest.php b/tests/Google/Ads/GoogleAds/V0/Services/CampaignCriterionServiceClientTest.php
new file mode 100644
index 000000000..d9e313e78
--- /dev/null
+++ b/tests/Google/Ads/GoogleAds/V0/Services/CampaignCriterionServiceClientTest.php
@@ -0,0 +1,212 @@
+ $this->getMockBuilder(CredentialsWrapper::class)
+ ->disableOriginalConstructor()
+ ->getMock(),
+ ];
+
+ return new CampaignCriterionServiceClient($options);
+ }
+
+ /**
+ * @test
+ */
+ public function getCampaignCriterionTest()
+ {
+ $transport = $this->createTransport();
+ $client = $this->createClient(['transport' => $transport]);
+
+ $this->assertTrue($transport->isExhausted());
+
+ // Mock response
+ $resourceName2 = 'resourceName2625949903';
+ $expectedResponse = new CampaignCriterion();
+ $expectedResponse->setResourceName($resourceName2);
+ $transport->addResponse($expectedResponse);
+
+ // Mock request
+ $formattedResourceName = $client->campaignCriteriaName('[CUSTOMER]', '[CAMPAIGN_CRITERIA]');
+
+ $response = $client->getCampaignCriterion($formattedResourceName);
+ $this->assertEquals($expectedResponse, $response);
+ $actualRequests = $transport->popReceivedCalls();
+ $this->assertSame(1, count($actualRequests));
+ $actualFuncCall = $actualRequests[0]->getFuncCall();
+ $actualRequestObject = $actualRequests[0]->getRequestObject();
+ $this->assertSame('/google.ads.googleads.v0.services.CampaignCriterionService/GetCampaignCriterion', $actualFuncCall);
+
+ $actualValue = $actualRequestObject->getResourceName();
+
+ $this->assertProtobufEquals($formattedResourceName, $actualValue);
+
+ $this->assertTrue($transport->isExhausted());
+ }
+
+ /**
+ * @test
+ */
+ public function getCampaignCriterionExceptionTest()
+ {
+ $transport = $this->createTransport();
+ $client = $this->createClient(['transport' => $transport]);
+
+ $this->assertTrue($transport->isExhausted());
+
+ $status = new stdClass();
+ $status->code = Code::DATA_LOSS;
+ $status->details = 'internal error';
+
+ $expectedExceptionMessage = json_encode([
+ 'message' => 'internal error',
+ 'code' => Code::DATA_LOSS,
+ 'status' => 'DATA_LOSS',
+ 'details' => [],
+ ], JSON_PRETTY_PRINT);
+ $transport->addResponse(null, $status);
+
+ // Mock request
+ $formattedResourceName = $client->campaignCriteriaName('[CUSTOMER]', '[CAMPAIGN_CRITERIA]');
+
+ try {
+ $client->getCampaignCriterion($formattedResourceName);
+ // If the $client method call did not throw, fail the test
+ $this->fail('Expected an ApiException, but no exception was thrown.');
+ } catch (ApiException $ex) {
+ $this->assertEquals($status->code, $ex->getCode());
+ $this->assertEquals($expectedExceptionMessage, $ex->getMessage());
+ }
+
+ // Call popReceivedCalls to ensure the stub is exhausted
+ $transport->popReceivedCalls();
+ $this->assertTrue($transport->isExhausted());
+ }
+
+ /**
+ * @test
+ */
+ public function mutateCampaignCriteriaTest()
+ {
+ $transport = $this->createTransport();
+ $client = $this->createClient(['transport' => $transport]);
+
+ $this->assertTrue($transport->isExhausted());
+
+ // Mock response
+ $expectedResponse = new MutateCampaignCriteriaResponse();
+ $transport->addResponse($expectedResponse);
+
+ // Mock request
+ $customerId = 'customerId-1772061412';
+ $operations = [];
+
+ $response = $client->mutateCampaignCriteria($customerId, $operations);
+ $this->assertEquals($expectedResponse, $response);
+ $actualRequests = $transport->popReceivedCalls();
+ $this->assertSame(1, count($actualRequests));
+ $actualFuncCall = $actualRequests[0]->getFuncCall();
+ $actualRequestObject = $actualRequests[0]->getRequestObject();
+ $this->assertSame('/google.ads.googleads.v0.services.CampaignCriterionService/MutateCampaignCriteria', $actualFuncCall);
+
+ $actualValue = $actualRequestObject->getCustomerId();
+
+ $this->assertProtobufEquals($customerId, $actualValue);
+ $actualValue = $actualRequestObject->getOperations();
+
+ $this->assertProtobufEquals($operations, $actualValue);
+
+ $this->assertTrue($transport->isExhausted());
+ }
+
+ /**
+ * @test
+ */
+ public function mutateCampaignCriteriaExceptionTest()
+ {
+ $transport = $this->createTransport();
+ $client = $this->createClient(['transport' => $transport]);
+
+ $this->assertTrue($transport->isExhausted());
+
+ $status = new stdClass();
+ $status->code = Code::DATA_LOSS;
+ $status->details = 'internal error';
+
+ $expectedExceptionMessage = json_encode([
+ 'message' => 'internal error',
+ 'code' => Code::DATA_LOSS,
+ 'status' => 'DATA_LOSS',
+ 'details' => [],
+ ], JSON_PRETTY_PRINT);
+ $transport->addResponse(null, $status);
+
+ // Mock request
+ $customerId = 'customerId-1772061412';
+ $operations = [];
+
+ try {
+ $client->mutateCampaignCriteria($customerId, $operations);
+ // If the $client method call did not throw, fail the test
+ $this->fail('Expected an ApiException, but no exception was thrown.');
+ } catch (ApiException $ex) {
+ $this->assertEquals($status->code, $ex->getCode());
+ $this->assertEquals($expectedExceptionMessage, $ex->getMessage());
+ }
+
+ // Call popReceivedCalls to ensure the stub is exhausted
+ $transport->popReceivedCalls();
+ $this->assertTrue($transport->isExhausted());
+ }
+}
diff --git a/tests/Google/Ads/GoogleAds/V0/Services/CampaignServiceClientTest.php b/tests/Google/Ads/GoogleAds/V0/Services/CampaignServiceClientTest.php
new file mode 100644
index 000000000..66344a82f
--- /dev/null
+++ b/tests/Google/Ads/GoogleAds/V0/Services/CampaignServiceClientTest.php
@@ -0,0 +1,212 @@
+ $this->getMockBuilder(CredentialsWrapper::class)
+ ->disableOriginalConstructor()
+ ->getMock(),
+ ];
+
+ return new CampaignServiceClient($options);
+ }
+
+ /**
+ * @test
+ */
+ public function getCampaignTest()
+ {
+ $transport = $this->createTransport();
+ $client = $this->createClient(['transport' => $transport]);
+
+ $this->assertTrue($transport->isExhausted());
+
+ // Mock response
+ $resourceName2 = 'resourceName2625949903';
+ $expectedResponse = new Campaign();
+ $expectedResponse->setResourceName($resourceName2);
+ $transport->addResponse($expectedResponse);
+
+ // Mock request
+ $formattedResourceName = $client->campaignName('[CUSTOMER]', '[CAMPAIGN]');
+
+ $response = $client->getCampaign($formattedResourceName);
+ $this->assertEquals($expectedResponse, $response);
+ $actualRequests = $transport->popReceivedCalls();
+ $this->assertSame(1, count($actualRequests));
+ $actualFuncCall = $actualRequests[0]->getFuncCall();
+ $actualRequestObject = $actualRequests[0]->getRequestObject();
+ $this->assertSame('/google.ads.googleads.v0.services.CampaignService/GetCampaign', $actualFuncCall);
+
+ $actualValue = $actualRequestObject->getResourceName();
+
+ $this->assertProtobufEquals($formattedResourceName, $actualValue);
+
+ $this->assertTrue($transport->isExhausted());
+ }
+
+ /**
+ * @test
+ */
+ public function getCampaignExceptionTest()
+ {
+ $transport = $this->createTransport();
+ $client = $this->createClient(['transport' => $transport]);
+
+ $this->assertTrue($transport->isExhausted());
+
+ $status = new stdClass();
+ $status->code = Code::DATA_LOSS;
+ $status->details = 'internal error';
+
+ $expectedExceptionMessage = json_encode([
+ 'message' => 'internal error',
+ 'code' => Code::DATA_LOSS,
+ 'status' => 'DATA_LOSS',
+ 'details' => [],
+ ], JSON_PRETTY_PRINT);
+ $transport->addResponse(null, $status);
+
+ // Mock request
+ $formattedResourceName = $client->campaignName('[CUSTOMER]', '[CAMPAIGN]');
+
+ try {
+ $client->getCampaign($formattedResourceName);
+ // If the $client method call did not throw, fail the test
+ $this->fail('Expected an ApiException, but no exception was thrown.');
+ } catch (ApiException $ex) {
+ $this->assertEquals($status->code, $ex->getCode());
+ $this->assertEquals($expectedExceptionMessage, $ex->getMessage());
+ }
+
+ // Call popReceivedCalls to ensure the stub is exhausted
+ $transport->popReceivedCalls();
+ $this->assertTrue($transport->isExhausted());
+ }
+
+ /**
+ * @test
+ */
+ public function mutateCampaignsTest()
+ {
+ $transport = $this->createTransport();
+ $client = $this->createClient(['transport' => $transport]);
+
+ $this->assertTrue($transport->isExhausted());
+
+ // Mock response
+ $expectedResponse = new MutateCampaignsResponse();
+ $transport->addResponse($expectedResponse);
+
+ // Mock request
+ $customerId = 'customerId-1772061412';
+ $operations = [];
+
+ $response = $client->mutateCampaigns($customerId, $operations);
+ $this->assertEquals($expectedResponse, $response);
+ $actualRequests = $transport->popReceivedCalls();
+ $this->assertSame(1, count($actualRequests));
+ $actualFuncCall = $actualRequests[0]->getFuncCall();
+ $actualRequestObject = $actualRequests[0]->getRequestObject();
+ $this->assertSame('/google.ads.googleads.v0.services.CampaignService/MutateCampaigns', $actualFuncCall);
+
+ $actualValue = $actualRequestObject->getCustomerId();
+
+ $this->assertProtobufEquals($customerId, $actualValue);
+ $actualValue = $actualRequestObject->getOperations();
+
+ $this->assertProtobufEquals($operations, $actualValue);
+
+ $this->assertTrue($transport->isExhausted());
+ }
+
+ /**
+ * @test
+ */
+ public function mutateCampaignsExceptionTest()
+ {
+ $transport = $this->createTransport();
+ $client = $this->createClient(['transport' => $transport]);
+
+ $this->assertTrue($transport->isExhausted());
+
+ $status = new stdClass();
+ $status->code = Code::DATA_LOSS;
+ $status->details = 'internal error';
+
+ $expectedExceptionMessage = json_encode([
+ 'message' => 'internal error',
+ 'code' => Code::DATA_LOSS,
+ 'status' => 'DATA_LOSS',
+ 'details' => [],
+ ], JSON_PRETTY_PRINT);
+ $transport->addResponse(null, $status);
+
+ // Mock request
+ $customerId = 'customerId-1772061412';
+ $operations = [];
+
+ try {
+ $client->mutateCampaigns($customerId, $operations);
+ // If the $client method call did not throw, fail the test
+ $this->fail('Expected an ApiException, but no exception was thrown.');
+ } catch (ApiException $ex) {
+ $this->assertEquals($status->code, $ex->getCode());
+ $this->assertEquals($expectedExceptionMessage, $ex->getMessage());
+ }
+
+ // Call popReceivedCalls to ensure the stub is exhausted
+ $transport->popReceivedCalls();
+ $this->assertTrue($transport->isExhausted());
+ }
+}
diff --git a/tests/Google/Ads/GoogleAds/V0/Services/CustomerServiceClientTest.php b/tests/Google/Ads/GoogleAds/V0/Services/CustomerServiceClientTest.php
new file mode 100644
index 000000000..2b18e8e6e
--- /dev/null
+++ b/tests/Google/Ads/GoogleAds/V0/Services/CustomerServiceClientTest.php
@@ -0,0 +1,135 @@
+ $this->getMockBuilder(CredentialsWrapper::class)
+ ->disableOriginalConstructor()
+ ->getMock(),
+ ];
+
+ return new CustomerServiceClient($options);
+ }
+
+ /**
+ * @test
+ */
+ public function getCustomerTest()
+ {
+ $transport = $this->createTransport();
+ $client = $this->createClient(['transport' => $transport]);
+
+ $this->assertTrue($transport->isExhausted());
+
+ // Mock response
+ $resourceName2 = 'resourceName2625949903';
+ $expectedResponse = new Customer();
+ $expectedResponse->setResourceName($resourceName2);
+ $transport->addResponse($expectedResponse);
+
+ // Mock request
+ $formattedResourceName = $client->customerName('[CUSTOMER]');
+
+ $response = $client->getCustomer($formattedResourceName);
+ $this->assertEquals($expectedResponse, $response);
+ $actualRequests = $transport->popReceivedCalls();
+ $this->assertSame(1, count($actualRequests));
+ $actualFuncCall = $actualRequests[0]->getFuncCall();
+ $actualRequestObject = $actualRequests[0]->getRequestObject();
+ $this->assertSame('/google.ads.googleads.v0.services.CustomerService/GetCustomer', $actualFuncCall);
+
+ $actualValue = $actualRequestObject->getResourceName();
+
+ $this->assertProtobufEquals($formattedResourceName, $actualValue);
+
+ $this->assertTrue($transport->isExhausted());
+ }
+
+ /**
+ * @test
+ */
+ public function getCustomerExceptionTest()
+ {
+ $transport = $this->createTransport();
+ $client = $this->createClient(['transport' => $transport]);
+
+ $this->assertTrue($transport->isExhausted());
+
+ $status = new stdClass();
+ $status->code = Code::DATA_LOSS;
+ $status->details = 'internal error';
+
+ $expectedExceptionMessage = json_encode([
+ 'message' => 'internal error',
+ 'code' => Code::DATA_LOSS,
+ 'status' => 'DATA_LOSS',
+ 'details' => [],
+ ], JSON_PRETTY_PRINT);
+ $transport->addResponse(null, $status);
+
+ // Mock request
+ $formattedResourceName = $client->customerName('[CUSTOMER]');
+
+ try {
+ $client->getCustomer($formattedResourceName);
+ // If the $client method call did not throw, fail the test
+ $this->fail('Expected an ApiException, but no exception was thrown.');
+ } catch (ApiException $ex) {
+ $this->assertEquals($status->code, $ex->getCode());
+ $this->assertEquals($expectedExceptionMessage, $ex->getMessage());
+ }
+
+ // Call popReceivedCalls to ensure the stub is exhausted
+ $transport->popReceivedCalls();
+ $this->assertTrue($transport->isExhausted());
+ }
+}
diff --git a/tests/Google/Ads/GoogleAds/V0/Services/GeoTargetConstantServiceClientTest.php b/tests/Google/Ads/GoogleAds/V0/Services/GeoTargetConstantServiceClientTest.php
new file mode 100644
index 000000000..49167ded4
--- /dev/null
+++ b/tests/Google/Ads/GoogleAds/V0/Services/GeoTargetConstantServiceClientTest.php
@@ -0,0 +1,135 @@
+ $this->getMockBuilder(CredentialsWrapper::class)
+ ->disableOriginalConstructor()
+ ->getMock(),
+ ];
+
+ return new GeoTargetConstantServiceClient($options);
+ }
+
+ /**
+ * @test
+ */
+ public function getGeoTargetConstantTest()
+ {
+ $transport = $this->createTransport();
+ $client = $this->createClient(['transport' => $transport]);
+
+ $this->assertTrue($transport->isExhausted());
+
+ // Mock response
+ $resourceName2 = 'resourceName2625949903';
+ $expectedResponse = new GeoTargetConstant();
+ $expectedResponse->setResourceName($resourceName2);
+ $transport->addResponse($expectedResponse);
+
+ // Mock request
+ $formattedResourceName = $client->geoTargetConstantName('[GEO_TARGET_CONSTANT]');
+
+ $response = $client->getGeoTargetConstant($formattedResourceName);
+ $this->assertEquals($expectedResponse, $response);
+ $actualRequests = $transport->popReceivedCalls();
+ $this->assertSame(1, count($actualRequests));
+ $actualFuncCall = $actualRequests[0]->getFuncCall();
+ $actualRequestObject = $actualRequests[0]->getRequestObject();
+ $this->assertSame('/google.ads.googleads.v0.services.GeoTargetConstantService/GetGeoTargetConstant', $actualFuncCall);
+
+ $actualValue = $actualRequestObject->getResourceName();
+
+ $this->assertProtobufEquals($formattedResourceName, $actualValue);
+
+ $this->assertTrue($transport->isExhausted());
+ }
+
+ /**
+ * @test
+ */
+ public function getGeoTargetConstantExceptionTest()
+ {
+ $transport = $this->createTransport();
+ $client = $this->createClient(['transport' => $transport]);
+
+ $this->assertTrue($transport->isExhausted());
+
+ $status = new stdClass();
+ $status->code = Code::DATA_LOSS;
+ $status->details = 'internal error';
+
+ $expectedExceptionMessage = json_encode([
+ 'message' => 'internal error',
+ 'code' => Code::DATA_LOSS,
+ 'status' => 'DATA_LOSS',
+ 'details' => [],
+ ], JSON_PRETTY_PRINT);
+ $transport->addResponse(null, $status);
+
+ // Mock request
+ $formattedResourceName = $client->geoTargetConstantName('[GEO_TARGET_CONSTANT]');
+
+ try {
+ $client->getGeoTargetConstant($formattedResourceName);
+ // If the $client method call did not throw, fail the test
+ $this->fail('Expected an ApiException, but no exception was thrown.');
+ } catch (ApiException $ex) {
+ $this->assertEquals($status->code, $ex->getCode());
+ $this->assertEquals($expectedExceptionMessage, $ex->getMessage());
+ }
+
+ // Call popReceivedCalls to ensure the stub is exhausted
+ $transport->popReceivedCalls();
+ $this->assertTrue($transport->isExhausted());
+ }
+}
diff --git a/tests/Google/Ads/GoogleAds/V0/Services/GoogleAdsFieldServiceClientTest.php b/tests/Google/Ads/GoogleAds/V0/Services/GoogleAdsFieldServiceClientTest.php
new file mode 100644
index 000000000..c8c6ca7cb
--- /dev/null
+++ b/tests/Google/Ads/GoogleAds/V0/Services/GoogleAdsFieldServiceClientTest.php
@@ -0,0 +1,217 @@
+ $this->getMockBuilder(CredentialsWrapper::class)
+ ->disableOriginalConstructor()
+ ->getMock(),
+ ];
+
+ return new GoogleAdsFieldServiceClient($options);
+ }
+
+ /**
+ * @test
+ */
+ public function getGoogleAdsFieldTest()
+ {
+ $transport = $this->createTransport();
+ $client = $this->createClient(['transport' => $transport]);
+
+ $this->assertTrue($transport->isExhausted());
+
+ // Mock response
+ $resourceName2 = 'resourceName2625949903';
+ $expectedResponse = new GoogleAdsField();
+ $expectedResponse->setResourceName($resourceName2);
+ $transport->addResponse($expectedResponse);
+
+ // Mock request
+ $formattedResourceName = $client->googleAdsFieldName('[GOOGLE_ADS_FIELD]');
+
+ $response = $client->getGoogleAdsField($formattedResourceName);
+ $this->assertEquals($expectedResponse, $response);
+ $actualRequests = $transport->popReceivedCalls();
+ $this->assertSame(1, count($actualRequests));
+ $actualFuncCall = $actualRequests[0]->getFuncCall();
+ $actualRequestObject = $actualRequests[0]->getRequestObject();
+ $this->assertSame('/google.ads.googleads.v0.services.GoogleAdsFieldService/GetGoogleAdsField', $actualFuncCall);
+
+ $actualValue = $actualRequestObject->getResourceName();
+
+ $this->assertProtobufEquals($formattedResourceName, $actualValue);
+
+ $this->assertTrue($transport->isExhausted());
+ }
+
+ /**
+ * @test
+ */
+ public function getGoogleAdsFieldExceptionTest()
+ {
+ $transport = $this->createTransport();
+ $client = $this->createClient(['transport' => $transport]);
+
+ $this->assertTrue($transport->isExhausted());
+
+ $status = new stdClass();
+ $status->code = Code::DATA_LOSS;
+ $status->details = 'internal error';
+
+ $expectedExceptionMessage = json_encode([
+ 'message' => 'internal error',
+ 'code' => Code::DATA_LOSS,
+ 'status' => 'DATA_LOSS',
+ 'details' => [],
+ ], JSON_PRETTY_PRINT);
+ $transport->addResponse(null, $status);
+
+ // Mock request
+ $formattedResourceName = $client->googleAdsFieldName('[GOOGLE_ADS_FIELD]');
+
+ try {
+ $client->getGoogleAdsField($formattedResourceName);
+ // If the $client method call did not throw, fail the test
+ $this->fail('Expected an ApiException, but no exception was thrown.');
+ } catch (ApiException $ex) {
+ $this->assertEquals($status->code, $ex->getCode());
+ $this->assertEquals($expectedExceptionMessage, $ex->getMessage());
+ }
+
+ // Call popReceivedCalls to ensure the stub is exhausted
+ $transport->popReceivedCalls();
+ $this->assertTrue($transport->isExhausted());
+ }
+
+ /**
+ * @test
+ */
+ public function searchGoogleAdsFieldsTest()
+ {
+ $transport = $this->createTransport();
+ $client = $this->createClient(['transport' => $transport]);
+
+ $this->assertTrue($transport->isExhausted());
+
+ // Mock response
+ $nextPageToken = '';
+ $totalResultsCount = 43694645;
+ $resultsElement = new GoogleAdsField();
+ $results = [$resultsElement];
+ $expectedResponse = new SearchGoogleAdsFieldsResponse();
+ $expectedResponse->setNextPageToken($nextPageToken);
+ $expectedResponse->setTotalResultsCount($totalResultsCount);
+ $expectedResponse->setResults($results);
+ $transport->addResponse($expectedResponse);
+
+ // Mock request
+ $query = 'query107944136';
+
+ $response = $client->searchGoogleAdsFields($query);
+ $this->assertEquals($expectedResponse, $response->getPage()->getResponseObject());
+ $resources = iterator_to_array($response->iterateAllElements());
+ $this->assertSame(1, count($resources));
+ $this->assertEquals($expectedResponse->getResults()[0], $resources[0]);
+
+ $actualRequests = $transport->popReceivedCalls();
+ $this->assertSame(1, count($actualRequests));
+ $actualFuncCall = $actualRequests[0]->getFuncCall();
+ $actualRequestObject = $actualRequests[0]->getRequestObject();
+ $this->assertSame('/google.ads.googleads.v0.services.GoogleAdsFieldService/SearchGoogleAdsFields', $actualFuncCall);
+
+ $actualValue = $actualRequestObject->getQuery();
+
+ $this->assertProtobufEquals($query, $actualValue);
+ $this->assertTrue($transport->isExhausted());
+ }
+
+ /**
+ * @test
+ */
+ public function searchGoogleAdsFieldsExceptionTest()
+ {
+ $transport = $this->createTransport();
+ $client = $this->createClient(['transport' => $transport]);
+
+ $this->assertTrue($transport->isExhausted());
+
+ $status = new stdClass();
+ $status->code = Code::DATA_LOSS;
+ $status->details = 'internal error';
+
+ $expectedExceptionMessage = json_encode([
+ 'message' => 'internal error',
+ 'code' => Code::DATA_LOSS,
+ 'status' => 'DATA_LOSS',
+ 'details' => [],
+ ], JSON_PRETTY_PRINT);
+ $transport->addResponse(null, $status);
+
+ // Mock request
+ $query = 'query107944136';
+
+ try {
+ $client->searchGoogleAdsFields($query);
+ // If the $client method call did not throw, fail the test
+ $this->fail('Expected an ApiException, but no exception was thrown.');
+ } catch (ApiException $ex) {
+ $this->assertEquals($status->code, $ex->getCode());
+ $this->assertEquals($expectedExceptionMessage, $ex->getMessage());
+ }
+
+ // Call popReceivedCalls to ensure the stub is exhausted
+ $transport->popReceivedCalls();
+ $this->assertTrue($transport->isExhausted());
+ }
+}
diff --git a/tests/Google/Ads/GoogleAds/V0/Services/GoogleAdsServiceClientTest.php b/tests/Google/Ads/GoogleAds/V0/Services/GoogleAdsServiceClientTest.php
new file mode 100644
index 000000000..40be3e4c6
--- /dev/null
+++ b/tests/Google/Ads/GoogleAds/V0/Services/GoogleAdsServiceClientTest.php
@@ -0,0 +1,149 @@
+ $this->getMockBuilder(CredentialsWrapper::class)
+ ->disableOriginalConstructor()
+ ->getMock(),
+ ];
+
+ return new GoogleAdsServiceClient($options);
+ }
+
+ /**
+ * @test
+ */
+ public function searchTest()
+ {
+ $transport = $this->createTransport();
+ $client = $this->createClient(['transport' => $transport]);
+
+ $this->assertTrue($transport->isExhausted());
+
+ // Mock response
+ $nextPageToken = '';
+ $totalResultsCount = 43694645;
+ $resultsElement = new GoogleAdsRow();
+ $results = [$resultsElement];
+ $expectedResponse = new SearchGoogleAdsResponse();
+ $expectedResponse->setNextPageToken($nextPageToken);
+ $expectedResponse->setTotalResultsCount($totalResultsCount);
+ $expectedResponse->setResults($results);
+ $transport->addResponse($expectedResponse);
+
+ // Mock request
+ $customerId = 'customerId-1772061412';
+ $query = 'query107944136';
+
+ $response = $client->search($customerId, $query);
+ $this->assertEquals($expectedResponse, $response->getPage()->getResponseObject());
+ $resources = iterator_to_array($response->iterateAllElements());
+ $this->assertSame(1, count($resources));
+ $this->assertEquals($expectedResponse->getResults()[0], $resources[0]);
+
+ $actualRequests = $transport->popReceivedCalls();
+ $this->assertSame(1, count($actualRequests));
+ $actualFuncCall = $actualRequests[0]->getFuncCall();
+ $actualRequestObject = $actualRequests[0]->getRequestObject();
+ $this->assertSame('/google.ads.googleads.v0.services.GoogleAdsService/Search', $actualFuncCall);
+
+ $actualValue = $actualRequestObject->getCustomerId();
+
+ $this->assertProtobufEquals($customerId, $actualValue);
+ $actualValue = $actualRequestObject->getQuery();
+
+ $this->assertProtobufEquals($query, $actualValue);
+ $this->assertTrue($transport->isExhausted());
+ }
+
+ /**
+ * @test
+ */
+ public function searchExceptionTest()
+ {
+ $transport = $this->createTransport();
+ $client = $this->createClient(['transport' => $transport]);
+
+ $this->assertTrue($transport->isExhausted());
+
+ $status = new stdClass();
+ $status->code = Code::DATA_LOSS;
+ $status->details = 'internal error';
+
+ $expectedExceptionMessage = json_encode([
+ 'message' => 'internal error',
+ 'code' => Code::DATA_LOSS,
+ 'status' => 'DATA_LOSS',
+ 'details' => [],
+ ], JSON_PRETTY_PRINT);
+ $transport->addResponse(null, $status);
+
+ // Mock request
+ $customerId = 'customerId-1772061412';
+ $query = 'query107944136';
+
+ try {
+ $client->search($customerId, $query);
+ // If the $client method call did not throw, fail the test
+ $this->fail('Expected an ApiException, but no exception was thrown.');
+ } catch (ApiException $ex) {
+ $this->assertEquals($status->code, $ex->getCode());
+ $this->assertEquals($expectedExceptionMessage, $ex->getMessage());
+ }
+
+ // Call popReceivedCalls to ensure the stub is exhausted
+ $transport->popReceivedCalls();
+ $this->assertTrue($transport->isExhausted());
+ }
+}
diff --git a/tests/Google/Ads/GoogleAds/V0/Services/KeywordViewServiceClientTest.php b/tests/Google/Ads/GoogleAds/V0/Services/KeywordViewServiceClientTest.php
new file mode 100644
index 000000000..7f36fc5c0
--- /dev/null
+++ b/tests/Google/Ads/GoogleAds/V0/Services/KeywordViewServiceClientTest.php
@@ -0,0 +1,135 @@
+ $this->getMockBuilder(CredentialsWrapper::class)
+ ->disableOriginalConstructor()
+ ->getMock(),
+ ];
+
+ return new KeywordViewServiceClient($options);
+ }
+
+ /**
+ * @test
+ */
+ public function getKeywordViewTest()
+ {
+ $transport = $this->createTransport();
+ $client = $this->createClient(['transport' => $transport]);
+
+ $this->assertTrue($transport->isExhausted());
+
+ // Mock response
+ $resourceName2 = 'resourceName2625949903';
+ $expectedResponse = new KeywordView();
+ $expectedResponse->setResourceName($resourceName2);
+ $transport->addResponse($expectedResponse);
+
+ // Mock request
+ $formattedResourceName = $client->keywordViewName('[CUSTOMER]', '[KEYWORD_VIEW]');
+
+ $response = $client->getKeywordView($formattedResourceName);
+ $this->assertEquals($expectedResponse, $response);
+ $actualRequests = $transport->popReceivedCalls();
+ $this->assertSame(1, count($actualRequests));
+ $actualFuncCall = $actualRequests[0]->getFuncCall();
+ $actualRequestObject = $actualRequests[0]->getRequestObject();
+ $this->assertSame('/google.ads.googleads.v0.services.KeywordViewService/GetKeywordView', $actualFuncCall);
+
+ $actualValue = $actualRequestObject->getResourceName();
+
+ $this->assertProtobufEquals($formattedResourceName, $actualValue);
+
+ $this->assertTrue($transport->isExhausted());
+ }
+
+ /**
+ * @test
+ */
+ public function getKeywordViewExceptionTest()
+ {
+ $transport = $this->createTransport();
+ $client = $this->createClient(['transport' => $transport]);
+
+ $this->assertTrue($transport->isExhausted());
+
+ $status = new stdClass();
+ $status->code = Code::DATA_LOSS;
+ $status->details = 'internal error';
+
+ $expectedExceptionMessage = json_encode([
+ 'message' => 'internal error',
+ 'code' => Code::DATA_LOSS,
+ 'status' => 'DATA_LOSS',
+ 'details' => [],
+ ], JSON_PRETTY_PRINT);
+ $transport->addResponse(null, $status);
+
+ // Mock request
+ $formattedResourceName = $client->keywordViewName('[CUSTOMER]', '[KEYWORD_VIEW]');
+
+ try {
+ $client->getKeywordView($formattedResourceName);
+ // If the $client method call did not throw, fail the test
+ $this->fail('Expected an ApiException, but no exception was thrown.');
+ } catch (ApiException $ex) {
+ $this->assertEquals($status->code, $ex->getCode());
+ $this->assertEquals($expectedExceptionMessage, $ex->getMessage());
+ }
+
+ // Call popReceivedCalls to ensure the stub is exhausted
+ $transport->popReceivedCalls();
+ $this->assertTrue($transport->isExhausted());
+ }
+}
diff --git a/tests/Google/Ads/GoogleAds/V0/Services/RecommendationServiceClientTest.php b/tests/Google/Ads/GoogleAds/V0/Services/RecommendationServiceClientTest.php
new file mode 100644
index 000000000..901415ebc
--- /dev/null
+++ b/tests/Google/Ads/GoogleAds/V0/Services/RecommendationServiceClientTest.php
@@ -0,0 +1,212 @@
+ $this->getMockBuilder(CredentialsWrapper::class)
+ ->disableOriginalConstructor()
+ ->getMock(),
+ ];
+
+ return new RecommendationServiceClient($options);
+ }
+
+ /**
+ * @test
+ */
+ public function getRecommendationTest()
+ {
+ $transport = $this->createTransport();
+ $client = $this->createClient(['transport' => $transport]);
+
+ $this->assertTrue($transport->isExhausted());
+
+ // Mock response
+ $resourceName2 = 'resourceName2625949903';
+ $expectedResponse = new Recommendation();
+ $expectedResponse->setResourceName($resourceName2);
+ $transport->addResponse($expectedResponse);
+
+ // Mock request
+ $formattedResourceName = $client->recommendationName('[CUSTOMER]', '[RECOMMENDATION]');
+
+ $response = $client->getRecommendation($formattedResourceName);
+ $this->assertEquals($expectedResponse, $response);
+ $actualRequests = $transport->popReceivedCalls();
+ $this->assertSame(1, count($actualRequests));
+ $actualFuncCall = $actualRequests[0]->getFuncCall();
+ $actualRequestObject = $actualRequests[0]->getRequestObject();
+ $this->assertSame('/google.ads.googleads.v0.services.RecommendationService/GetRecommendation', $actualFuncCall);
+
+ $actualValue = $actualRequestObject->getResourceName();
+
+ $this->assertProtobufEquals($formattedResourceName, $actualValue);
+
+ $this->assertTrue($transport->isExhausted());
+ }
+
+ /**
+ * @test
+ */
+ public function getRecommendationExceptionTest()
+ {
+ $transport = $this->createTransport();
+ $client = $this->createClient(['transport' => $transport]);
+
+ $this->assertTrue($transport->isExhausted());
+
+ $status = new stdClass();
+ $status->code = Code::DATA_LOSS;
+ $status->details = 'internal error';
+
+ $expectedExceptionMessage = json_encode([
+ 'message' => 'internal error',
+ 'code' => Code::DATA_LOSS,
+ 'status' => 'DATA_LOSS',
+ 'details' => [],
+ ], JSON_PRETTY_PRINT);
+ $transport->addResponse(null, $status);
+
+ // Mock request
+ $formattedResourceName = $client->recommendationName('[CUSTOMER]', '[RECOMMENDATION]');
+
+ try {
+ $client->getRecommendation($formattedResourceName);
+ // If the $client method call did not throw, fail the test
+ $this->fail('Expected an ApiException, but no exception was thrown.');
+ } catch (ApiException $ex) {
+ $this->assertEquals($status->code, $ex->getCode());
+ $this->assertEquals($expectedExceptionMessage, $ex->getMessage());
+ }
+
+ // Call popReceivedCalls to ensure the stub is exhausted
+ $transport->popReceivedCalls();
+ $this->assertTrue($transport->isExhausted());
+ }
+
+ /**
+ * @test
+ */
+ public function applyRecommendationTest()
+ {
+ $transport = $this->createTransport();
+ $client = $this->createClient(['transport' => $transport]);
+
+ $this->assertTrue($transport->isExhausted());
+
+ // Mock response
+ $expectedResponse = new ApplyRecommendationResponse();
+ $transport->addResponse($expectedResponse);
+
+ // Mock request
+ $customerId = 'customerId-1772061412';
+ $operations = [];
+
+ $response = $client->applyRecommendation($customerId, $operations);
+ $this->assertEquals($expectedResponse, $response);
+ $actualRequests = $transport->popReceivedCalls();
+ $this->assertSame(1, count($actualRequests));
+ $actualFuncCall = $actualRequests[0]->getFuncCall();
+ $actualRequestObject = $actualRequests[0]->getRequestObject();
+ $this->assertSame('/google.ads.googleads.v0.services.RecommendationService/ApplyRecommendation', $actualFuncCall);
+
+ $actualValue = $actualRequestObject->getCustomerId();
+
+ $this->assertProtobufEquals($customerId, $actualValue);
+ $actualValue = $actualRequestObject->getOperations();
+
+ $this->assertProtobufEquals($operations, $actualValue);
+
+ $this->assertTrue($transport->isExhausted());
+ }
+
+ /**
+ * @test
+ */
+ public function applyRecommendationExceptionTest()
+ {
+ $transport = $this->createTransport();
+ $client = $this->createClient(['transport' => $transport]);
+
+ $this->assertTrue($transport->isExhausted());
+
+ $status = new stdClass();
+ $status->code = Code::DATA_LOSS;
+ $status->details = 'internal error';
+
+ $expectedExceptionMessage = json_encode([
+ 'message' => 'internal error',
+ 'code' => Code::DATA_LOSS,
+ 'status' => 'DATA_LOSS',
+ 'details' => [],
+ ], JSON_PRETTY_PRINT);
+ $transport->addResponse(null, $status);
+
+ // Mock request
+ $customerId = 'customerId-1772061412';
+ $operations = [];
+
+ try {
+ $client->applyRecommendation($customerId, $operations);
+ // If the $client method call did not throw, fail the test
+ $this->fail('Expected an ApiException, but no exception was thrown.');
+ } catch (ApiException $ex) {
+ $this->assertEquals($status->code, $ex->getCode());
+ $this->assertEquals($expectedExceptionMessage, $ex->getMessage());
+ }
+
+ // Call popReceivedCalls to ensure the stub is exhausted
+ $transport->popReceivedCalls();
+ $this->assertTrue($transport->isExhausted());
+ }
+}