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>
60 lines
1.5 KiB
Go
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)
|
|
} |