<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_fetch_credentials(search_handle: int, count: int) -> str: """ Fetch next credentials for search. :param search_handle: Search handle (created by prover_open_credentials_search) :param count: Count of records to fetch :return: credentials_json: List of credentials: [{ "referent": string, // cred_id in the wallet "attrs": {"key1":"raw_value1", "key2":"raw_value2"}, "schema_id": string, "cred_def_id": string, "rev_reg_id": Optional<string>, "cred_rev_id": Optional<string> }] NOTE: The list of length less than the requested count means credentials search iterator is completed. """


    logger = logging.getLogger(__name__)
    logger.debug("prover_fetch_credentials: >>> search_handle: %r, count: %r",
                 search_handle,
                 count)

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

    c_search_handle = c_int32(search_handle)
    c_count = c_uint(count)

    credentials_json = await do_call('indy_prover_fetch_credentials',
                                     c_search_handle,
                                     c_count,
                                     prover_fetch_credentials.cb)

    res = credentials_json.decode()
    logger.debug("prover_fetch_credentials: <<< res: %r", res)
    return res