func NewWriter()

in pkg/sdk/value/compression/writer.go [38:82]


func NewWriter(w io.Writer, algorithm string) (io.WriteCloser, error) {
	// Normalize input
	algorithm = strings.TrimSpace(strings.ToLower(algorithm))

	var (
		compressedWriter io.WriteCloser
		writerErr        error
	)

	// Apply transformation
	switch algorithm {
	case "gzip":
		compressedWriter = gzip.NewWriter(w)
	case "lzw", "lzw-lsb":
		compressedWriter = lzw.NewWriter(w, lzw.LSB, 8)
	case "lzw-msb":
		compressedWriter = lzw.NewWriter(w, lzw.MSB, 8)
	case "lz4":
		compressedWriter = lz4.NewWriter(w)
	case "s2", "snappy":
		compressedWriter = s2.NewWriter(w)
	case "zlib":
		compressedWriter = zlib.NewWriter(w)
	case "flate":
		compressedWriter, writerErr = flate.NewWriter(w, flate.DefaultCompression)
		if writerErr != nil {
			return nil, fmt.Errorf("unable to initialize flate compressor: %w", writerErr)
		}
	case "lzma":
		compressedWriter, writerErr = xz.NewWriter(w)
		if writerErr != nil {
			return nil, fmt.Errorf("unable to initialize lzma compressor: %w", writerErr)
		}
	case "zstd":
		compressedWriter, writerErr = zstd.NewWriter(w)
		if writerErr != nil {
			return nil, fmt.Errorf("unable to initialize zstd compressor: %w", writerErr)
		}
	default:
		return nil, fmt.Errorf("unhandled compression algorithm '%s'", algorithm)
	}

	// No error
	return compressedWriter, nil
}