gzlib/src/gzlib.gleam
2024-06-04 18:35:24 +10:00

42 lines
1.3 KiB
Gleam

pub opaque type CompressionLevel {
CompressionLevel(level: Int)
}
pub const no_compression = CompressionLevel(0)
pub const min_compression = CompressionLevel(1)
pub const max_compression = CompressionLevel(9)
pub const default_compression = CompressionLevel(6)
pub fn compression_level(level: Int) -> Result(CompressionLevel, Nil) {
case level >= 0 && level <= 9 {
True -> Ok(CompressionLevel(level))
False -> Error(Nil)
}
}
@external(erlang, "zlib", "compress")
@external(javascript, "./gzlib_js.mjs", "compress")
pub fn compress(data: BitArray) -> BitArray
@external(erlang, "gzlib_erl", "compress")
@external(javascript, "./gzlib_js.mjs", "compress")
fn do_compress_with_level(data: BitArray, level: Int) -> BitArray
pub fn compress_with_level(data: BitArray, level: CompressionLevel) -> BitArray {
do_compress_with_level(data, level.level)
}
@external(erlang, "zlib", "uncompress")
@external(javascript, "./gzlib_js.mjs", "uncompress")
pub fn uncompress(data: BitArray) -> BitArray
@external(erlang, "erlang", "crc32")
@external(javascript, "./gzlib_js.mjs", "crc32")
pub fn crc32(data: BitArray) -> Int
@external(erlang, "erlang", "crc32")
@external(javascript, "./gzlib_js.mjs", "continueCrc32")
pub fn continue_crc32(init: Int, data: BitArray) -> Int