Skip to content

Commit

Permalink
Adding compressionLevel option
Browse files Browse the repository at this point in the history
  • Loading branch information
sethloco committed Apr 10, 2021
1 parent bdc2c67 commit 8ef1ff8
Show file tree
Hide file tree
Showing 6 changed files with 31 additions and 8 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -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).
8 changes: 6 additions & 2 deletions lib/src/brotli/codec.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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<int> compress(List<int> data) {
return BrotliEncoder().convert(data);
return BrotliEncoder(level: compressionLevel).convert(data);
}

@override
Expand Down
8 changes: 6 additions & 2 deletions lib/src/lz4/codec.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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<int> compress(List<int> data) {
return Lz4Encoder().convert(data);
return Lz4Encoder(level: compressionLevel).convert(data);
}

@override
Expand Down
8 changes: 6 additions & 2 deletions lib/src/zstd/codec.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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<int> compress(List<int> data) {
return ZstdEncoder().convert(data);
return ZstdEncoder(level: compressionLevel).convert(data);
}

@override
Expand Down
2 changes: 1 addition & 1 deletion pubspec.yaml
Original file line number Diff line number Diff line change
@@ -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
Expand Down
9 changes: 8 additions & 1 deletion test/es_compression_grpc_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down

0 comments on commit 8ef1ff8

Please sign in to comment.