#region Copyright notice and license
// Copyright 2019 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.
#endregion
using System;
using Grpc.Core.Utils;
namespace Grpc.Core
{
///
/// Base class for lightweight client-side stubs.
/// All calls are invoked via a CallInvoker.
/// Lite client stubs have no configuration knobs, all configuration
/// is provided by decorating the call invoker.
/// Note: experimental API that can change or be removed without any prior notice.
///
public abstract class LiteClientBase
{
readonly CallInvoker callInvoker;
///
/// Initializes a new instance of LiteClientBase class that
/// throws NotImplementedException upon invocation of any RPC.
/// This constructor is only provided to allow creation of test doubles
/// for client classes (e.g. mocking requires a parameterless constructor).
///
protected LiteClientBase() : this(new UnimplementedCallInvoker())
{
}
///
/// Initializes a new instance of ClientBase class.
///
/// The CallInvoker for remote call invocation.
public LiteClientBase(CallInvoker callInvoker)
{
this.callInvoker = GrpcPreconditions.CheckNotNull(callInvoker, nameof(callInvoker));
}
///
/// Gets the call invoker.
///
protected CallInvoker CallInvoker
{
get { return this.callInvoker; }
}
///
/// Call invoker that throws NotImplementedException for all requests.
///
private class UnimplementedCallInvoker : CallInvoker
{
public UnimplementedCallInvoker()
{
}
public override TResponse BlockingUnaryCall(Method method, string host, CallOptions options, TRequest request)
{
throw new NotImplementedException();
}
public override AsyncUnaryCall AsyncUnaryCall(Method method, string host, CallOptions options, TRequest request)
{
throw new NotImplementedException();
}
public override AsyncServerStreamingCall AsyncServerStreamingCall(Method method, string host, CallOptions options, TRequest request)
{
throw new NotImplementedException();
}
public override AsyncClientStreamingCall AsyncClientStreamingCall(Method method, string host, CallOptions options)
{
throw new NotImplementedException();
}
public override AsyncDuplexStreamingCall AsyncDuplexStreamingCall(Method method, string host, CallOptions options)
{
throw new NotImplementedException();
}
}
}
}