<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 async def prover_search_credentials(wallet_handle: int, query_json: str) -> (int, int):
 """ Search for credentials stored in wallet. Credentials can be filtered by tags created during saving of credential. Instead of immediately returning of fetched credentials this call returns search_handle that can be used later to fetch records by small batches (with prover_credentials_search_fetch_records). :param wallet_handle: wallet handler (created by open_wallet). :param query_json: wql style filter for credentials searching based on tags. where wql query: indy-sdk/docs/design/011-wallet-query-language/README.md :return: search_handle: Search handle that can be used later to fetch records by small batches (with prover_credentials_search_fetch_records) total_count: Total count of records """


    logger = logging.getLogger(__name__)
    logger.debug("prover_search_credentials: >>> wallet_handle: %r, query_json: %r",
                 wallet_handle,
                 query_json)

    if not hasattr(prover_search_credentials, "cb"):
        logger.debug("prover_search_credentials: Creating callback")
        prover_search_credentials.cb = create_cb(CFUNCTYPE(None, c_int32, c_int32, c_int32, c_uint))

    c_wallet_handle = c_int32(wallet_handle)
    c_query_json = c_char_p(query_json.encode('utf-8'))

    res = await do_call('indy_prover_search_credentials',
                        c_wallet_handle,
                        c_query_json,
                        prover_search_credentials.cb)

    logger.debug("prover_search_credentials: <<< res: %r", res)
    return res