Examples
Serialization
#include <flashfix/serialization.h>
#define STR_LEN(s) (sizeof(s) - 1)
/*...*/
fix_field_t data_fields[5] = {
{.tag = "35", .value = "A", .tag_len = 2, .value_len = 1},
{.tag = "49", .value = "CLIENT123", .tag_len = 2, .value_len = 9},
{.tag = "56", .value = "SPOT", .tag_len = 2, .value_len = 4},
{.tag = "34", .value = "1", .tag_len = 2, .value_len = 1},
{.tag = "52", .value = timestamp_str, .tag_len = 2, .value_len = 21},
};
char raw_serialized_data[1024];
const uint16_t data_len = ff_serialize_raw(raw_serialized_data, (const fix_message_t *){fields, 5});
fix_field_t logon_fields[6] = {
{.tag = "35", .value = "A", .tag_len = 2, .value_len = 1},
{.tag = "49", .value = "CLIENT123", .tag_len = 2, .value_len = 9},
{.tag = "56", .value = "SPOT", .tag_len = 2, .value_len = 4},
{.tag = "34", .value = "1", .tag_len = 2, .value_len = 1},
{.tag = "52", .value = timestamp_str, .tag_len = 2, .value_len = 21},
{.tag = "98", .value = "0", .tag_len = 2, .value_len = 1},
};
char serialized_logon[1024];
const uint16_t logon_len = ff_serialize(serialized_logon, (const fix_message_t *){logon_fields, 6});
write(sockfd, raw_serialized_data, data_len);
/*...*/
Deserialization
#include <flashfix/deserialization.h>
/*...*/
char read_buffer[4096];
uint16_t bytes_read = 0;
do {
bytes_read += read(sockfd, read_buffer, 1024);
} while (ff_is_complete(read_buffer, bytes_read) == false);
fix_field_t fields[16];
fix_message_t message = {fields, 16};
ff_deserialize(&message, read_buffer, bytes_read);
/*...*/