class InputPageProjection implements PageProjection {

    @Override
    public Work<Block> project(ConnectorSession session, DriverYieldSignal yieldSignal, Page page, SelectedPositions selectedPositions)
    {
        Block block = requireNonNull(page, "page is null").getBlock(0);
        requireNonNull(selectedPositions, "selectedPositions is null");

        // TODO: make it lazy when MergePages have better merging heuristics for small lazy pages
        if (selectedPositions.isList()) {
            block = block.copyPositions(selectedPositions.getPositions(), selectedPositions.getOffset(), selectedPositions.size());
        }
        else {
            block = block.getRegion(selectedPositions.getOffset(), selectedPositions.size());
        }
        return new CompletedWork<>(block);
    }

    public  InputPageProjection(int inputChannel, Type type);

}