public void MutateAssetSetAssets()
        {
            moq::Mock <AssetSetAssetService.AssetSetAssetServiceClient> mockGrpcClient = new moq::Mock <AssetSetAssetService.AssetSetAssetServiceClient>(moq::MockBehavior.Strict);
            MutateAssetSetAssetsRequest request = new MutateAssetSetAssetsRequest
            {
                CustomerId = "customer_id3b3724cb",
                Operations =
                {
                    new AssetSetAssetOperation(),
                },
            };
            MutateAssetSetAssetsResponse expectedResponse = new MutateAssetSetAssetsResponse
            {
                Results =
                {
                    new MutateAssetSetAssetResult(),
                },
                PartialFailureError = new gr::Status(),
            };

            mockGrpcClient.Setup(x => x.MutateAssetSetAssets(request, moq::It.IsAny <grpccore::CallOptions>())).Returns(expectedResponse);
            AssetSetAssetServiceClient   client   = new AssetSetAssetServiceClientImpl(mockGrpcClient.Object, null);
            MutateAssetSetAssetsResponse response = client.MutateAssetSetAssets(request.CustomerId, request.Operations);

            Assert.AreEqual(expectedResponse, response);
            mockGrpcClient.VerifyAll();
        }
        // [END add_asset_set]

        // [START add_asset_set_asset]
        /// <summary>
        /// Adds an Asset to an AssetSet by creating an AssetSetAsset link.
        /// </summary>
        /// <param name="client">The Google Ads client.</param>
        /// <param name="customerId">The Google Ads customer ID.</param>
        /// <param name="assetResourceName">Name of the asset resource.</param>
        /// <param name="assetSetResourceName">Name of the asset set resource.</param>
        private void AddAssetsToAssetSet(GoogleAdsClient client, long customerId,
                                         string assetResourceName, string assetSetResourceName)
        {
            AssetSetAssetServiceClient assetSetAssetService = client.GetService(
                Services.V10.AssetSetAssetService);

            AssetSetAsset assetSetAsset = new AssetSetAsset()
            {
                Asset    = assetResourceName,
                AssetSet = assetSetResourceName
            };

            // Creates an operation to add the link.
            AssetSetAssetOperation operation = new AssetSetAssetOperation()
            {
                Create = assetSetAsset
            };
            // Sends the mutate request.
            // Note this is the point that the API will enforce uniqueness of the
            // DynamicEducationAsset.program_id field. You can have any number of
            // assets with the same program_id, however, only one Asset is allowed
            // per AssetSet with the same program ID.
            MutateAssetSetAssetsResponse response =
                assetSetAssetService.MutateAssetSetAssets(
                    customerId.ToString(), new[] { operation });
            // Prints some information about the response.
            string resourceName = response.Results[0].ResourceName;

            Console.WriteLine($"Created AssetSetAsset link with resource name {resourceName}.");
        }
        public async stt::Task MutateAssetSetAssetsRequestObjectAsync()
        {
            moq::Mock <AssetSetAssetService.AssetSetAssetServiceClient> mockGrpcClient = new moq::Mock <AssetSetAssetService.AssetSetAssetServiceClient>(moq::MockBehavior.Strict);
            MutateAssetSetAssetsRequest request = new MutateAssetSetAssetsRequest
            {
                CustomerId = "customer_id3b3724cb",
                Operations =
                {
                    new AssetSetAssetOperation(),
                },
                PartialFailure      = false,
                ValidateOnly        = true,
                ResponseContentType = gagve::ResponseContentTypeEnum.Types.ResponseContentType.ResourceNameOnly,
            };
            MutateAssetSetAssetsResponse expectedResponse = new MutateAssetSetAssetsResponse
            {
                Results =
                {
                    new MutateAssetSetAssetResult(),
                },
                PartialFailureError = new gr::Status(),
            };

            mockGrpcClient.Setup(x => x.MutateAssetSetAssetsAsync(request, moq::It.IsAny <grpccore::CallOptions>())).Returns(new grpccore::AsyncUnaryCall <MutateAssetSetAssetsResponse>(stt::Task.FromResult(expectedResponse), null, null, null, null));
            AssetSetAssetServiceClient   client = new AssetSetAssetServiceClientImpl(mockGrpcClient.Object, null);
            MutateAssetSetAssetsResponse responseCallSettings = await client.MutateAssetSetAssetsAsync(request, gaxgrpc::CallSettings.FromCancellationToken(st::CancellationToken.None));

            Assert.AreEqual(expectedResponse, responseCallSettings);
            MutateAssetSetAssetsResponse responseCancellationToken = await client.MutateAssetSetAssetsAsync(request, st::CancellationToken.None);

            Assert.AreEqual(expectedResponse, responseCancellationToken);
            mockGrpcClient.VerifyAll();
        }
        // [END add_asset_set]

        // [START add_asset_set_asset]
        /// <summary>
        /// Adds an Asset to an AssetSet by creating an AssetSetAsset link.
        /// </summary>
        /// <param name="client">The Google Ads client.</param>
        /// <param name="customerId">The Google Ads customer ID for which the call is made.</param>
        /// <param name="assetResourceNames">The asset resource names.</param>
        /// <param name="assetSetResourceName">Resource name of the asset set.</param>
        private void AddAssetsToAssetSet(GoogleAdsClient client, long customerId,
                                         List <string> assetResourceNames, string assetSetResourceName)
        {
            AssetSetAssetServiceClient assetSetAssetService = client.GetService(
                Services.V10.AssetSetAssetService);

            List <AssetSetAssetOperation> operations = new List <AssetSetAssetOperation>();

            foreach (string assetResourceName in assetResourceNames)
            {
                AssetSetAsset assetSetAsset = new AssetSetAsset()
                {
                    Asset    = assetResourceName,
                    AssetSet = assetSetResourceName
                };

                // Creates an operation to add the link.
                AssetSetAssetOperation operation = new AssetSetAssetOperation()
                {
                    Create = assetSetAsset
                };

                operations.Add(operation);
            }
            // Sends the mutate request.
            MutateAssetSetAssetsResponse response =
                assetSetAssetService.MutateAssetSetAssets(customerId.ToString(), operations);
            // Prints some information about the response.
            string resourceName = response.Results[0].ResourceName;

            Console.WriteLine($"Created AssetSetAsset link with resource name {resourceName}.");
        }