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


export declare namespace google.ads.integration.service.partner {
  export interface NotifyRequest {
    /**
     * Whether the user has accepted the term of condition.
     */
    isAccepted?: boolean;
  }
}
export declare namespace google.ads.integration.service.partner {
  export interface NotifyResponse {}
}


export declare namespace google.ads.integration.service.partner {
  /**
   * Service called by the Ads app to notify partner whether the
   * user has accepted terms and conditions.
   */
  export interface TermsAndConditionsService {
    /**
     * Notify partner whether the user has accepted terms and
     * conditions.
     */
    notify(request: google.ads.integration.service.partner.NotifyRequest):
        Promise<google.ads.integration.service.partner.NotifyResponse>;
  }
}
