package org.apache.solr.search.grouping.distributed.command;

/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

import org.apache.lucene.search.TopDocs;

/**
 * Encapsulates {@link TopDocs} and the number of matches.
 */
public class QueryCommandResult {

  private final TopDocs topDocs;
  private final int matches;

  public QueryCommandResult(TopDocs topDocs, int matches) {
    this.topDocs = topDocs;
    this.matches = matches;
  }

  public TopDocs getTopDocs() {
    return topDocs;
  }

  public int getMatches() {
    return matches;
  }
}
