dsync-serializer.c revision bcb4e51a409d94ae670de96afb8483a4f7855294
bcb4e51a409d94ae670de96afb8483a4f7855294Stephan Bosch/* Copyright (c) 2013-2018 Dovecot authors, see the included COPYING file */
7bd5b1c64cc987715bdaf8cc4907c3c37d5d7b29Timo Sirainen const char *const *keys;
7bd5b1c64cc987715bdaf8cc4907c3c37d5d7b29Timo Sirainenstruct dsync_serializer *dsync_serializer_init(const char *const keys[])
7bd5b1c64cc987715bdaf8cc4907c3c37d5d7b29Timo Sirainen unsigned int i, count;
7bd5b1c64cc987715bdaf8cc4907c3c37d5d7b29Timo Sirainen pool = pool_alloconly_create("dsync serializer", 512);
7bd5b1c64cc987715bdaf8cc4907c3c37d5d7b29Timo Sirainen serializer = p_new(pool, struct dsync_serializer, 1);
7bd5b1c64cc987715bdaf8cc4907c3c37d5d7b29Timo Sirainen dup_keys = p_new(pool, const char *, count + 1);
7bd5b1c64cc987715bdaf8cc4907c3c37d5d7b29Timo Sirainen for (i = 0; i < count; i++)
7bd5b1c64cc987715bdaf8cc4907c3c37d5d7b29Timo Sirainenvoid dsync_serializer_deinit(struct dsync_serializer **_serializer)
7bd5b1c64cc987715bdaf8cc4907c3c37d5d7b29Timo Sirainen struct dsync_serializer *serializer = *_serializer;
7bd5b1c64cc987715bdaf8cc4907c3c37d5d7b29Timo Sirainendsync_serializer_encode_header_line(struct dsync_serializer *serializer)
7bd5b1c64cc987715bdaf8cc4907c3c37d5d7b29Timo Sirainen unsigned int i;
7bd5b1c64cc987715bdaf8cc4907c3c37d5d7b29Timo Sirainen for (i = 0; serializer->keys[i] != NULL; i++) {
d03a871a77f8ec36f48f5fea98d810e51b186fdbTimo Sirainen str_append_tabescaped(str, serializer->keys[i]);
7bd5b1c64cc987715bdaf8cc4907c3c37d5d7b29Timo Sirainendsync_serializer_encode_begin(struct dsync_serializer *serializer)
7bd5b1c64cc987715bdaf8cc4907c3c37d5d7b29Timo Sirainen pool_t pool = pool_alloconly_create("dsync serializer encode", 1024);
7bd5b1c64cc987715bdaf8cc4907c3c37d5d7b29Timo Sirainen encoder = p_new(pool, struct dsync_serializer_encoder, 1);
7bd5b1c64cc987715bdaf8cc4907c3c37d5d7b29Timo Sirainen p_array_init(&encoder->values, pool, serializer->keys_count);
7bd5b1c64cc987715bdaf8cc4907c3c37d5d7b29Timo Sirainenvoid dsync_serializer_encode_add(struct dsync_serializer_encoder *encoder,
7bd5b1c64cc987715bdaf8cc4907c3c37d5d7b29Timo Sirainen unsigned int i;
7bd5b1c64cc987715bdaf8cc4907c3c37d5d7b29Timo Sirainen for (i = 0; encoder->serializer->keys[i] != NULL; i++) {
7bd5b1c64cc987715bdaf8cc4907c3c37d5d7b29Timo Sirainen if (strcmp(encoder->serializer->keys[i], key) == 0) {
7bd5b1c64cc987715bdaf8cc4907c3c37d5d7b29Timo Sirainenvoid dsync_serializer_encode_finish(struct dsync_serializer_encoder **_encoder,
7bd5b1c64cc987715bdaf8cc4907c3c37d5d7b29Timo Sirainen struct dsync_serializer_encoder *encoder = *_encoder;
7bd5b1c64cc987715bdaf8cc4907c3c37d5d7b29Timo Sirainen const char *const *values;
7bd5b1c64cc987715bdaf8cc4907c3c37d5d7b29Timo Sirainen unsigned int i, count;
7bd5b1c64cc987715bdaf8cc4907c3c37d5d7b29Timo Sirainen for (i = 0; i < count; i++) {