Get an wallet record by id

    :param wallet_handle: wallet handler (created by open_wallet).
    :param type_: allows to separate different record types collections
    :param id: the id of record
    :param options_json: //TODO: FIXME: Think about replacing by bitmask
      {
        retrieveType: (optional, false by default) Retrieve record type,
        retrieveValue: (optional, true by default) Retrieve record value,
        retrieveTags: (optional, true by default) Retrieve record tags
      }
    :return: wallet record json:
     {
       id: "Some id",
       type: "Some type", // present only if retrieveType set to true
       value: "Some value", // present only if retrieveValue set to true
       tags: <tags json>, // present only if retrieveTags set to true
     }

async def get_wallet_record(wallet_handle: int,
                            type_: str,
                            id: str,
                            options_json: str) -> str:
    """
    Get an wallet record by id

    :param wallet_handle: wallet handler (created by open_wallet).
    :param type_: allows to separate different record types collections
    :param id: the id of record
    :param options_json: //TODO: FIXME: Think about replacing by bitmask
      {
        retrieveType: (optional, false by default) Retrieve record type,
        retrieveValue: (optional, true by default) Retrieve record value,
        retrieveTags: (optional, true by default) Retrieve record tags
      }
    :return: wallet record json:
     {
       id: "Some id",
       type: "Some type", // present only if retrieveType set to true
       value: "Some value", // present only if retrieveValue set to true
       tags: <tags json>, // present only if retrieveTags set to true
     }
    """

    logger = logging.getLogger(__name__)
    logger.debug("get_wallet_record: >>> wallet_handle: %r, type_: %r, id: %r, options_json: %r",
                 wallet_handle,
                 type_,
                 id,
                 options_json)

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

    c_wallet_handle = c_int32(wallet_handle)
    c_type = c_char_p(type_.encode('utf-8'))
    c_id = c_char_p(id.encode('utf-8'))
    c_options_json = c_char_p(options_json.encode('utf-8'))

    wallet_record = await do_call('indy_get_wallet_record',
                                  c_wallet_handle,
                                  c_type,
                                  c_id,
                                  c_options_json,
                                  get_wallet_record.cb)
    res = wallet_record.decode()

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