import { grpc } from '@improbable-eng/grpc-web';
import { FromGrpcWebServiceDefinition } from './grpc-web';
import { FromTsProtoServiceDefinition, TsProtoServiceDefinition } from './ts-proto';
export type ServiceDefinition = {
    [method: string]: AnyMethodDefinition;
};
export type MethodDefinition<RequestIn, RequestOut, ResponseIn, ResponseOut, RequestStream extends boolean = boolean, ResponseStream extends boolean = boolean> = {
    path: string;
    requestStream: RequestStream;
    responseStream: ResponseStream;
    requestSerialize(value: RequestIn): Uint8Array;
    requestDeserialize(bytes: Uint8Array): RequestOut;
    responseSerialize(value: ResponseIn): Uint8Array;
    responseDeserialize(bytes: Uint8Array): ResponseOut;
    options: {
        idempotencyLevel?: 'IDEMPOTENT' | 'NO_SIDE_EFFECTS';
    };
};
export type AnyMethodDefinition = MethodDefinition<any, any, any, any>;
export type CompatServiceDefinition = ServiceDefinition | grpc.ServiceDefinition | TsProtoServiceDefinition;
export type NormalizedServiceDefinition<Service extends CompatServiceDefinition> = Service extends ServiceDefinition ? Service : Service extends grpc.ServiceDefinition ? FromGrpcWebServiceDefinition<Service> : Service extends TsProtoServiceDefinition ? FromTsProtoServiceDefinition<Service> : never;
