static CCNxTlvDictionary *
_ccnxInterestFacadeV1_Create(const CCNxName   *name,                       // required
                             const uint32_t lifetimeMilliseconds,          // may use DefaultLimetimeMilliseconds
                             const PARCBuffer *keyId,                      // may be NULL
                             const PARCBuffer *contentObjectHash,          // may be NULL
                             const uint32_t hopLimit)                      // may be DefaultHopLimit
{
    assertNotNull(name, "Parameter name must be non-null");

    CCNxTlvDictionary *dictionary = ccnxCodecSchemaV1TlvDictionary_CreateInterest();

    if (dictionary) {
        ccnxTlvDictionary_PutName(dictionary, CCNxCodecSchemaV1TlvDictionary_MessageFastArray_NAME, name);

        if (lifetimeMilliseconds != CCNxInterestDefault_LifetimeMilliseconds) {
            _ccnxInterestFacadeV1_SetLifetime(dictionary, lifetimeMilliseconds);
        }

        if (keyId) {
            _ccnxInterestFacadeV1_SetKeyIdRestriction(dictionary, keyId);
        }

        if (contentObjectHash) {
            _ccnxInterestFacadeV1_SetContentObjectHashRestriction(dictionary, contentObjectHash);
        }

        if (hopLimit != CCNxInterestDefault_HopLimit) {
            _ccnxInterestFacadeV1_SetHopLimit(dictionary, hopLimit);
        }
    } else {
        trapOutOfMemory("Could not allocate an Interest");
    }

    return dictionary;
}
LONGBOW_TEST_CASE(Global, ccnxWireFormatMessage_PutGetIoVec)
{
    uint8_t *data = parcMemory_Allocate(64);
    memset(data, 0, 64);

    PARCBuffer *buffer = parcBuffer_Allocate(1);
    CCNxCodecNetworkBuffer *netbuff = ccnxCodecNetworkBuffer_CreateFromArray(&ParcMemoryMemoryBlock, NULL, 64, data);
    CCNxCodecNetworkBufferIoVec *iovec = ccnxCodecNetworkBuffer_CreateIoVec(netbuff);

    CCNxTlvDictionary *packet = ccnxCodecSchemaV1TlvDictionary_CreateInterest();
    ccnxWireFormatMessage_PutIoVec((CCNxWireFormatMessage *) packet, iovec);

    CCNxCodecNetworkBufferIoVec *test = ccnxWireFormatMessage_GetIoVec((CCNxWireFormatMessage *) packet);
    assertTrue(test == iovec, "Failed to get iovec from dictionary, expected %p got %p", (void *) iovec, (void *) test);

    ccnxTlvDictionary_Release(&packet);
    parcBuffer_Release(&buffer);
    ccnxCodecNetworkBufferIoVec_Release(&iovec);
    ccnxCodecNetworkBuffer_Release(&netbuff);
}