Skip to content
julia
import Zarr: Compressor, zcompress, zuncompress, getCompressor, JSON, compressortypes

import CodecZstd

"""
    ZstdCompressor(clevel=-1)
Returns a `ZstdCompressor` struct that can serve as a Zarr array compressor. Keyword arguments are:
* `clevel=-1` the compression level, number between -1 (Default), 0 (no compression) and 9 (max compression)
*  default is -1 compromise between speed and compression (currently equivalent to level 6).
"""
struct ZstdCompressor <: Compressor
    level::Int
    checksum::Bool
end

ZstdCompressor(;level=-1, checksum = false) = ZstdCompressor(level, checksum)

function getCompressor(::Type{ZstdCompressor}, d::Dict)
    ZstdCompressor(d["level"], get(d, "checksum", false))
end

JSON.lower(z::ZstdCompressor) = Dict("id"=>"zstd", "level" => z.level, "checksum" => z.checksum)

function zuncompress(a, ::ZstdCompressor, T)
    result = transcode(CodecZstd.ZstdDecompressor,a)
    Zarr._reinterpret(Base.nonmissingtype(T),result)
end

function zcompress(a, ::ZstdCompressor)
    a_uint8 = vec(Zarr._reinterpret(UInt8,a))
    transcode(CodecZstd.ZstdCompressor, a_uint8)
end

This page was generated using Literate.jl.