// DecompressWire wraps a wire.ReadContext into a decompressor, according to the given settings, // so that any messages read through the returned ReadContext will first be decompressed. func DecompressWire(ctx *wire.ReadContext, compression *CompressionSettings) (*wire.ReadContext, error) { if compression == nil { return nil, errors.Wrap(fmt.Errorf("no compression specified"), 1) } if compression.Algorithm == CompressionAlgorithm_NONE { return ctx, nil } decompressor := decompressors[compression.Algorithm] if decompressor == nil { return nil, errors.Wrap(fmt.Errorf("no compressor registered for %s", compression.Algorithm.String()), 1) } compressedReader, err := decompressor.Apply(ctx.Reader()) if err != nil { return nil, errors.Wrap(err, 1) } return wire.NewReadContext(compressedReader), nil }