use std::io;
use std::ffi::CStr;
use libc::{c_char, c_int, c_uint, c_void, size_t};
pub type ZBUFFCompressionContext = *mut c_void;
pub type ZBUFFDecompressionContext = *mut c_void;
pub type ZSTDCompressionContext = *mut c_void;
pub type ZSTDDecompressionContext = *mut c_void;
pub type ErrorCode = size_t;
pub fn parse_code(code: ErrorCode) -> Result<usize, io::Error> {
unsafe {
if ZBUFF_isError(code) == 0 {
Ok(code as usize)
} else {
let msg = CStr::from_ptr(ZBUFF_getErrorName(code));
let error = io::Error::new(io::ErrorKind::Other,
msg.to_str().unwrap().to_string());
Err(error)
}
}
}
extern "C" {
pub fn ZBUFF_createCCtx() -> ZBUFFCompressionContext;
pub fn ZBUFF_freeCCtx(cctx: ZBUFFCompressionContext) -> ErrorCode;
pub fn ZBUFF_compressInit(cctx: ZBUFFCompressionContext,
compressionLevel: c_int)
-> ErrorCode;
pub fn ZBUFF_compressInitDictionary(cctx: ZBUFFCompressionContext,
dict: *const u8, dictSize: size_t,
compressionLevel: c_int)
-> ErrorCode;
pub fn ZBUFF_compressContinue(cctx: ZBUFFCompressionContext, dst: *mut u8,
dstCapacityPtr: *mut size_t, src: *const u8,
srcSizePtr: *mut size_t)
-> ErrorCode;
pub fn ZBUFF_compressFlush(cctx: ZBUFFCompressionContext, dst: *mut u8,
dstCapacityPtr: *mut size_t)
-> ErrorCode;
pub fn ZBUFF_compressEnd(cctx: ZBUFFCompressionContext, dst: *mut u8,
dstCapacityPtr: *mut size_t)
-> ErrorCode;
pub fn ZBUFF_createDCtx() -> ZBUFFDecompressionContext;
pub fn ZBUFF_freeDCtx(dctx: ZBUFFDecompressionContext) -> ErrorCode;
pub fn ZBUFF_decompressInit(dctx: ZBUFFDecompressionContext) -> size_t;
pub fn ZBUFF_decompressInitDictionary(dctx: ZBUFFDecompressionContext,
dict: *const u8, dictSize: size_t)
-> ErrorCode;
pub fn ZBUFF_decompressContinue(dctx: ZBUFFDecompressionContext,
dst: *mut u8, dstCapacityPtr: *mut size_t,
src: *const u8, srcSizePtr: *mut size_t)
-> ErrorCode;
pub fn ZBUFF_isError(errorCode: size_t) -> c_uint;
pub fn ZBUFF_getErrorName(errorCode: size_t) -> *const c_char;
pub fn ZBUFF_recommendedCInSize() -> size_t;
pub fn ZBUFF_recommendedCOutSize() -> size_t;
pub fn ZBUFF_recommendedDInSize() -> size_t;
pub fn ZBUFF_recommendedDOutSize() -> size_t;
pub fn ZSTD_createCCtx() -> ZSTDCompressionContext;
pub fn ZSTD_freeCCtx(cctx: ZSTDCompressionContext) -> ErrorCode;
pub fn ZSTD_createDCtx() -> ZSTDDecompressionContext;
pub fn ZSTD_freeDCtx(cctx: ZSTDDecompressionContext) -> ErrorCode;
pub fn ZSTD_compress_usingDict(ctx: ZSTDCompressionContext, dst: *mut u8,
dstCapacity: size_t, src: *const u8,
srcSize: size_t, dict: *const u8,
dictSize: size_t, compressionLevel: i32)
-> ErrorCode;
pub fn ZSTD_decompress_usingDict(dctx: ZSTDDecompressionContext,
dst: *mut u8, dstCapacity: size_t,
src: *const u8, srcSize: size_t,
dict: *const u8, dictSize: size_t)
-> ErrorCode;
pub fn ZSTD_compressBound(srcSize: size_t) -> size_t;
pub fn ZDICT_trainFromBuffer(dictBuffer: *mut u8,
dictBufferCapacity: size_t,
samplesBuffer: *const u8,
sampleSizes: *const size_t, nbSamples: size_t)
-> size_t;
}