export interface ServiceRequest { readonly type: T; readonly params: P; __r?: ServiceResponseBase; } declare class BaseServiceRequest implements ServiceRequest { readonly type: T; readonly params: P; readonly __r?: ServiceResponseBase; constructor(type: T, params: P); } export declare class ServiceRequest extends BaseServiceRequest { constructor(type: T, params: P); } interface ServiceResponseBase { ___T?: T; value?: T; error?: Error | undefined; } export interface ServiceResponseSuccess extends ServiceResponseBase { value: T; error?: undefined; } export interface ServiceResponseFailure extends ServiceResponseBase { error: Error; } export type ServiceResponse = ServiceResponseSuccess | ServiceResponseFailure; export type IsARequest = (r: ServiceRequest) => r is T; export declare function createResponse>(value: T, _req?: R): ServiceResponseSuccess; type VT = T extends { ___T?: infer R; } ? R : never; export type RequestResponseType = T extends { __r?: infer R; } ? R : never; export declare function createResponseFail(_request: R, error: E): ServiceResponseFailure>>; export declare function isServiceResponseSuccess(res: ServiceResponseBase): res is ServiceResponseSuccess; export declare function isServiceResponseFailure(res: ServiceResponseBase): res is ServiceResponseFailure; export declare function isInstanceOfFn(constructor: { new (): T; }): (t: unknown) => t is T; export declare const __testing__: { BaseServiceRequest: typeof BaseServiceRequest; }; export {}; //# sourceMappingURL=request.d.ts.map