Generic find and overlap implementation.

    Arguments
      names (:py:class:`collections.abc.Sequence`): The queries of the
        people to find overlaps for.
      client (:py:class:`~.TMDbClient`): The TMDb client.
      find_method (:py:class:`str`): The name of the client method to
        use for finding candidates.
      get_method (:py:class:`str`): The name of the client method to
        use for getting detailed information on a candidate.
      overlap_function (:py:class:`collections.abc.Callable`): The
        function to call for the resulting overlap.

async def _find_overlap(queries, client, find_method, get_method,
                        overlap_function):
    """Generic find and overlap implementation.

    Arguments
      names (:py:class:`collections.abc.Sequence`): The queries of the
        people to find overlaps for.
      client (:py:class:`~.TMDbClient`): The TMDb client.
      find_method (:py:class:`str`): The name of the client method to
        use for finding candidates.
      get_method (:py:class:`str`): The name of the client method to
        use for getting detailed information on a candidate.
      overlap_function (:py:class:`collections.abc.Callable`): The
        function to call for the resulting overlap.

    """
    results = []
    for query in queries:
        candidates = await getattr(client, find_method)(query)
        if not candidates:
            raise ValueError('no result found for {!r}'.format(query))
        result = await getattr(client, get_method)(id_=candidates[0].id_)
        results.append(result)
    return await overlap_function(results, client)