import { Logger } from 'winston';
import { IServiceProvider } from '@dolittle/sdk.dependencyinversion';
import { IEventTypes } from '@dolittle/sdk.events';
import { ExecutionContext } from '@dolittle/sdk.execution';
import { Internal } from '@dolittle/sdk.events.processing';
import { Cancellation } from '@dolittle/sdk.resilience';
import { IReverseCallClient } from '@dolittle/sdk.services';
import { Failure } from '@dolittle/contracts/Protobuf/Failure_pb';
import { ProcessorFailure, RetryProcessingState } from '@dolittle/contracts/Runtime/Events.Processing/Processors_pb';
import { ProjectionsClient } from '@dolittle/contracts/Runtime/Events.Processing/Projections_grpc_pb';
import { ProjectionRegistrationRequest, ProjectionRegistrationResponse, ProjectionRequest, ProjectionResponse } from '@dolittle/contracts/Runtime/Events.Processing/Projections_pb';
import { IProjection } from '../IProjection';
import { ProjectionId } from '../ProjectionId';
/**
 * Represents an implementation of {@link Internal.EventProcessor} for {@link Projection}.
 * @template T The type of the projection read model.
 */
export declare class ProjectionProcessor<T> extends Internal.EventProcessor<ProjectionId, ProjectionsClient, ProjectionRegistrationRequest, ProjectionRegistrationResponse, ProjectionRequest, ProjectionResponse> {
    private _projection;
    private _eventTypes;
    /**
     * Initializes a new instance of {@link ProjectionProcessor}.
     * @param {IProjection<T>} _projection - The projection.
     * @param {IEventTypes} _eventTypes - The registered event types for this projection.
     */
    constructor(_projection: IProjection<T>, _eventTypes: IEventTypes);
    /** @inheritdoc */
    protected get registerArguments(): ProjectionRegistrationRequest;
    private setKeySelector;
    private createCopiesSpecification;
    private createMongoDBPropertyConversions;
    /** @inheritdoc */
    protected createClient(client: ProjectionsClient, registerArguments: ProjectionRegistrationRequest, callback: (request: ProjectionRequest, executionContext: ExecutionContext) => Promise<ProjectionResponse>, executionContext: ExecutionContext, pingInterval: number, logger: Logger, cancellation: Cancellation): IReverseCallClient<ProjectionRegistrationResponse>;
    /** @inheritdoc */
    protected getFailureFromRegisterResponse(response: ProjectionRegistrationResponse): Failure | undefined;
    /** @inheritdoc */
    protected getRetryProcessingStateFromRequest(request: ProjectionRequest): RetryProcessingState | undefined;
    /** @inheritdoc */
    protected createResponseFromFailure(failure: ProcessorFailure): ProjectionResponse;
    /** @inheritdoc */
    protected handle(request: ProjectionRequest, executionContext: ExecutionContext, services: IServiceProvider, logger: Logger): Promise<ProjectionResponse>;
}
//# sourceMappingURL=ProjectionProcessor.d.ts.map