import type Geometry from "@arcgis/core/geometry/Geometry";
import type { Feature } from "../../data/Feature.js";
import type { FeatureSource } from "../../data/FeatureSource.js";
import type { CountResult } from "../CountResult.js";
import type { IdentifyOptions } from "./IdentifyOptions.js";
/**
 * Provides identify capability for one or more
 * {@link data/FeatureSource!FeatureSource}s.
 */
export interface IdentifyProvider {
    /**
     * Determines whether this provider can handle identify operations for the
     * given feature source.
     *
     * @param source The feature source.
     */
    isSupported(source: FeatureSource, geometry: Geometry, options?: IdentifyOptions): boolean;
    /**
     * Identifies features in a given source that intersect the given geometry.
     *
     * @param source The source to identify.
     * @param geometry The geometry to match against.
     * @param options Options that affect the identify operation.
     * @returns An iterable of {@link data/Feature!Feature}s containing identify
     *   results. If canceled, the provider may reject the returned promise with
     *   an instance of {@link support/Cancellable!Cancellation}, though it may
     *   still fulfill with results instead.
     */
    identify(source: FeatureSource | FeatureSource[], geometry: Geometry, options?: IdentifyOptions): AsyncIterable<Feature>;
    /**
     * Counts features in a given source that intersect the given geometry.
     *
     * @param source The source to identify.
     * @param geometry The geometry to match against.
     * @param options Options that affect the identify operation.
     * @returns An iterable of {@link tasks/CountResult!CountResult}s containing
     *   count results. If canceled, the provider may reject the returned
     *   promise with an instance of {@link support/Cancellable!Cancellation},
     *   though it may still fulfill with count results instead.
     */
    count(source: FeatureSource, geometry: Geometry, options?: IdentifyOptions): Promise<CountResult>;
}
