diff --git a/CHANGELOG.md b/CHANGELOG.md index a03c2b7..ba0e98d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.9.1 + +- Implemented `compressionLevel` option to codecs to control speed vs compression ratio. + ## 0.9.0 - Initial development release, created by Seth Berman [Instantiations, Inc](https://www.instantiations.com). diff --git a/lib/src/brotli/codec.dart b/lib/src/brotli/codec.dart index ded1468..8accad4 100644 --- a/lib/src/brotli/codec.dart +++ b/lib/src/brotli/codec.dart @@ -7,15 +7,19 @@ import 'package:grpc/grpc.dart' as grpc; /// A brotli compressor and decompressor. class BrotliCodec implements grpc.Codec { + /// Brotli compression level to use. + /// see [BrotliEncoder.level] for a value range. + final int compressionLevel; + /// Brotli gRPC codec constructor - const BrotliCodec(); + const BrotliCodec({this.compressionLevel = BrotliOption.defaultLevel}); @override final encodingName = 'brotli'; @override List compress(List data) { - return BrotliEncoder().convert(data); + return BrotliEncoder(level: compressionLevel).convert(data); } @override diff --git a/lib/src/lz4/codec.dart b/lib/src/lz4/codec.dart index bf1898c..93712b3 100644 --- a/lib/src/lz4/codec.dart +++ b/lib/src/lz4/codec.dart @@ -7,15 +7,19 @@ import 'package:grpc/grpc.dart' as grpc; /// An lz4 compressor and decompressor. class Lz4Codec implements grpc.Codec { + /// Lz4 compression level to use. + /// see [Lz4Encoder.level] for a value range. + final int compressionLevel; + /// Lz4 gRPC codec constructor - const Lz4Codec(); + const Lz4Codec({this.compressionLevel = Lz4Option.defaultLevel}); @override final encodingName = 'lz4'; @override List compress(List data) { - return Lz4Encoder().convert(data); + return Lz4Encoder(level: compressionLevel).convert(data); } @override diff --git a/lib/src/zstd/codec.dart b/lib/src/zstd/codec.dart index 762160f..522a5e7 100644 --- a/lib/src/zstd/codec.dart +++ b/lib/src/zstd/codec.dart @@ -7,15 +7,19 @@ import 'package:grpc/grpc.dart' as grpc; /// A zstd compressor and decompressor. class ZstdCodec implements grpc.Codec { + /// Zstd compression level to use. + /// see [ZstdEncoder.level] for a value range. + final int compressionLevel; + /// Zstd gRPC codec constructor - const ZstdCodec(); + const ZstdCodec({this.compressionLevel = ZstdOption.defaultLevel}); @override final encodingName = 'zstd'; @override List compress(List data) { - return ZstdEncoder().convert(data); + return ZstdEncoder(level: compressionLevel).convert(data); } @override diff --git a/pubspec.yaml b/pubspec.yaml index 4993a08..0baa783 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: es_compression_grpc description: gRPC compression support for Brotli, Lz4, and Zstd (Zstandard) using the es_compression Dart library -version: 0.9.0 +version: 0.9.1 homepage: https://www.instantiations.com issue_tracker: https://github.com/instantiations/es_compression_grpc/issues repository: https://github.com/instantiations/es_compression_grpc diff --git a/test/es_compression_grpc_test.dart b/test/es_compression_grpc_test.dart index 6b44c8b..abd732c 100644 --- a/test/es_compression_grpc_test.dart +++ b/test/es_compression_grpc_test.dart @@ -24,7 +24,14 @@ void main() { }); test('Test Codec Compress/Decompress', () { - const codecs = [BrotliCodec(), Lz4Codec(), ZstdCodec()]; + const codecs = [ + BrotliCodec(), + BrotliCodec(compressionLevel: 0), + Lz4Codec(), + Lz4Codec(compressionLevel: 16), + ZstdCodec(), + ZstdCodec(compressionLevel: 22) + ]; for (final codec in codecs) { final testData = utf8.encode('Hello Dart!'); expect(codec.decompress(codec.compress(testData)), testData);