<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 set_pairwise_metadata(wallet_handle: int, their_did: str, metadata: Optional[str]) -> None: """ Save some data in the Wallet for pairwise associated with Did. :param wallet_handle: wallet handler (created by open_wallet). :param their_did: encoded DID :param metadata: some extra information for pairwise :return: Error code """


    logger = logging.getLogger(__name__)
    logger.debug("set_pairwise_metadata: >>> wallet_handle: %r, their_did: %r, metadata: %r",
                 wallet_handle,
                 their_did,
                 metadata)

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

    c_wallet_handle = c_int32(wallet_handle)
    c_their_did = c_char_p(their_did.encode('utf-8'))
    c_metadata = c_char_p(metadata.encode('utf-8')) if metadata is not None else None

    await do_call('indy_set_pairwise_metadata',
                  c_wallet_handle,
                  c_their_did,
                  c_metadata,
                  set_pairwise_metadata.cb)

    logger.debug("set_pairwise_metadata: <<<")