UNPKG

nice-grpc

Version:

A Node.js gRPC library that is nice to you

100 lines (91 loc) 2.6 kB
import {CallContext} from 'nice-grpc-common'; import { CompatServiceDefinition, MethodDefinition, NormalizedServiceDefinition, ServiceDefinition, } from '../service-definitions'; import {MethodRequestOut, MethodResponseIn} from '../utils/methodTypes'; export type ServiceImplementation< Service extends CompatServiceDefinition, CallContextExt = {}, > = RawServiceImplementation< NormalizedServiceDefinition<Service>, CallContextExt >; export type RawServiceImplementation< Service extends ServiceDefinition, CallContextExt = {}, > = { [Method in keyof Service]: MethodImplementation< Service[Method], CallContextExt >; }; export type MethodImplementation< Definition extends MethodDefinition<any, any, any, any>, CallContextExt = {}, > = Definition['requestStream'] extends false ? Definition['responseStream'] extends false ? UnaryMethodImplementation< MethodRequestOut<Definition>, MethodResponseIn<Definition>, CallContextExt > : Definition['responseStream'] extends true ? ServerStreamingMethodImplementation< MethodRequestOut<Definition>, MethodResponseIn<Definition>, CallContextExt > : never : Definition['requestStream'] extends true ? Definition['responseStream'] extends false ? ClientStreamingMethodImplementation< MethodRequestOut<Definition>, MethodResponseIn<Definition>, CallContextExt > : Definition['responseStream'] extends true ? BidiStreamingMethodImplementation< MethodRequestOut<Definition>, MethodResponseIn<Definition>, CallContextExt > : never : never; export type UnaryMethodImplementation< Request, Response, CallContextExt = {}, > = ( request: Request, context: CallContext & CallContextExt, ) => Promise<Response>; export type ServerStreamingMethodImplementation< Request, Response, CallContextExt = {}, > = ( request: Request, context: CallContext & CallContextExt, ) => ServerStreamingMethodResult<Response>; export type ClientStreamingMethodImplementation< Request, Response, CallContextExt = {}, > = ( request: AsyncIterable<Request>, context: CallContext & CallContextExt, ) => Promise<Response>; export type BidiStreamingMethodImplementation< Request, Response, CallContextExt = {}, > = ( request: AsyncIterable<Request>, context: CallContext & CallContextExt, ) => ServerStreamingMethodResult<Response>; export type ServerStreamingMethodResult<Response> = { [Symbol.asyncIterator](): AsyncIterator<Response, void>; };