int test_pack_bool() { size_t sz; uint8_t data[] = {0x00}; minipack_pack_bool(data, true, &sz); mu_assert_mem(data, 1, "\xC3"); mu_assert(sz == 1); minipack_pack_bool(data, false, &sz); mu_assert_mem(data, 1, "\xC2"); mu_assert(sz == 1); return 0; }
// Serializes event data to memory at a given pointer. // // data - The event data to pack. // ptr - The pointer to the current location. // length - The number of bytes written. // // Returns 0 if successful, otherwise returns -1. int sky_event_data_pack(sky_event_data *data, void *ptr, size_t *sz) { size_t _sz; void *start = ptr; // Validate. check(data != NULL, "Event data required"); check(ptr != NULL, "Pointer required"); // Write key. *((sky_property_id_t*)ptr) = data->key; ptr += sizeof(data->key); // Write value. switch(data->data_type) { case SKY_DATA_TYPE_INT: minipack_pack_int(ptr, data->int_value, &_sz); check(_sz != 0, "Unable to pack event data int value"); ptr += _sz; break; case SKY_DATA_TYPE_DOUBLE: minipack_pack_double(ptr, data->double_value, &_sz); check(_sz != 0, "Unable to pack event data float value"); ptr += _sz; break; case SKY_DATA_TYPE_BOOLEAN: minipack_pack_bool(ptr, data->boolean_value, &_sz); check(_sz != 0, "Unable to pack event data boolean value"); ptr += _sz; break; case SKY_DATA_TYPE_STRING: // Write value header. minipack_pack_raw(ptr, blength(data->string_value), &_sz); check(_sz != 0, "Unable to pack event data value header at %p", ptr); ptr += _sz; // Write actual string value. if(blength(data->string_value) > 0) { assert(bdata(data->string_value) != NULL); memmove(ptr, bdata(data->string_value), blength(data->string_value)); } ptr += blength(data->string_value); break; default: sentinel("Invalid data type (%d) for event data", data->data_type); } // Store number of bytes written. if(sz != NULL) *sz = (ptr-start); return 0; error: return -1; }