#ifndef SIEVE_BINARY_DUMPER_H
#define SIEVE_BINARY_DUMPER_H

#include "sieve-common.h"

/*
 * Binary dumper object
 */

struct sieve_binary_dumper;

struct sieve_binary_dumper *
sieve_binary_dumper_create(struct sieve_binary *sbin);
void sieve_binary_dumper_free(struct sieve_binary_dumper **dumper);

pool_t sieve_binary_dumper_pool(struct sieve_binary_dumper *dumper);

/*
 * Formatted output
 */

void sieve_binary_dumpf(const struct sieve_dumptime_env *denv,
			const char *fmt, ...) ATTR_FORMAT(2, 3);
void sieve_binary_dump_sectionf(const struct sieve_dumptime_env *denv,
				const char *fmt, ...) ATTR_FORMAT(2, 3);

/*
 * Dumping the binary
 */

bool sieve_binary_dumper_run(struct sieve_binary_dumper *dumper,
			     struct ostream *stream, bool verbose);

/*
 * Hexdump production
 */

bool sieve_binary_dumper_hexdump(struct sieve_binary_dumper *dumper,
				 struct ostream *stream);

#endif
