grpcDecompressor function

StreamTransformer<GrpcMessage, GrpcMessage> grpcDecompressor({
  1. CodecRegistry? codecRegistry,
})

Implementation

StreamTransformer<GrpcMessage, GrpcMessage> grpcDecompressor({
  CodecRegistry? codecRegistry,
}) {
  Codec? codec;
  return StreamTransformer<GrpcMessage, GrpcMessage>.fromHandlers(
      handleData: (GrpcMessage value, EventSink<GrpcMessage> sink) {
    if (value is GrpcData && value.isCompressed) {
      if (codec == null) {
        sink.addError(
          GrpcError.unimplemented('Compression mechanism not supported'),
        );
        return;
      }
      sink.add(GrpcData(codec!.decompress(value.data), isCompressed: false));
      return;
    }

    if (value is GrpcMetadata && value.metadata.containsKey('grpc-encoding')) {
      codec = codecRegistry?.lookup(value.metadata['grpc-encoding']!);
    }
    sink.add(value);
  });
}