/*
 * Copyright 2016 The gRPC Authors
 *
 * 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.
 */

package io.grpc;

/**
 * Provides a way to bind instance of service implementation to server.
 *
 * <p>It is used by service's abstract class generated by compiler (eg.:
 * RouteGuideGrpc.RouteGuideImplBase for RouteGuide service) and lets implementation classes to be
 * bind to server.
 *
 * <pre><code>
 * class RouteGuideService extends RouteGuideGrpc.RouteGuideImplBase {
 *   // ...
 * }
 *
 * Server server = ServerBuilder.forPort(1234).addService(new RouteGuideService()).build();
 * </code></pre></p>
 */
public interface BindableService {
  /**
   * Creates {@link ServerServiceDefinition} object for current instance of service implementation.
   *
   * @return ServerServiceDefinition object.
   */
  ServerServiceDefinition bindService();
}
