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);
    },
  );
}