/*-------------------------------------------------------------------------
 *
 * engine_compression.h
 *
 * Type and function declarations for compression methods.
 *
 * Copyright (c) Citus Data, Inc.
 *
 *-------------------------------------------------------------------------
 */

#ifndef COLUMNAR_COMPRESSION_H
#define COLUMNAR_COMPRESSION_H

/* Enumaration for columnar table's compression method */
typedef enum
{
	COMPRESSION_TYPE_INVALID = -1,
	COMPRESSION_NONE = 0,
	COMPRESSION_PG_LZ = 1,
	COMPRESSION_LZ4 = 2,
	COMPRESSION_ZSTD = 3,
	COMPRESSION_DEFLATE = 4,
	COMPRESSION_ZXC = 5,    /* ZXC asymmetric codec: https://github.com/hellobertrand/zxc */

	COMPRESSION_COUNT
} CompressionType;

extern bool CompressBuffer(StringInfo inputBuffer,
						   StringInfo outputBuffer,
						   CompressionType compressionType,
						   int compressionLevel);
extern StringInfo DecompressBuffer(StringInfo buffer, CompressionType compressionType,
								   uint64 decompressedSize);

#endif /* COLUMNAR_COMPRESSION_H */
