Files
kalzu-value-store/storage/compression.go
ryyst 5223438ddf refactor: extract storage system to storage package
Extracted BadgerDB operations, compression, and revision management
from main.go to dedicated storage package for better modularity.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-18 20:40:42 +03:00

60 lines
1.5 KiB
Go

package storage
import (
"fmt"
"github.com/klauspost/compress/zstd"
)
// CompressionService handles ZSTD compression and decompression
type CompressionService struct {
compressor *zstd.Encoder
decompressor *zstd.Decoder
}
// NewCompressionService creates a new compression service
func NewCompressionService() (*CompressionService, error) {
// Initialize ZSTD compressor
compressor, err := zstd.NewWriter(nil)
if err != nil {
return nil, fmt.Errorf("failed to initialize ZSTD compressor: %v", err)
}
// Initialize ZSTD decompressor
decompressor, err := zstd.NewReader(nil)
if err != nil {
compressor.Close()
return nil, fmt.Errorf("failed to initialize ZSTD decompressor: %v", err)
}
return &CompressionService{
compressor: compressor,
decompressor: decompressor,
}, nil
}
// Close closes the compression and decompression resources
func (c *CompressionService) Close() {
if c.compressor != nil {
c.compressor.Close()
}
if c.decompressor != nil {
c.decompressor.Close()
}
}
// CompressData compresses data using ZSTD
func (c *CompressionService) CompressData(data []byte) ([]byte, error) {
if c.compressor == nil {
return nil, fmt.Errorf("compressor not initialized")
}
return c.compressor.EncodeAll(data, make([]byte, 0, len(data))), nil
}
// DecompressData decompresses ZSTD-compressed data
func (c *CompressionService) DecompressData(compressedData []byte) ([]byte, error) {
if c.decompressor == nil {
return nil, fmt.Errorf("decompressor not initialized")
}
return c.decompressor.DecodeAll(compressedData, nil)
}