// CompressWire wraps a wire.WriteContext into a compressor, according to given settings, // so that any messages written through the returned WriteContext will first be compressed. func CompressWire(ctx *wire.WriteContext, compression *CompressionSettings) (*wire.WriteContext, error) { if compression == nil { return nil, errors.Wrap(fmt.Errorf("no compression specified"), 1) } if compression.Algorithm == CompressionAlgorithm_NONE { return ctx, nil } compressor := compressors[compression.Algorithm] if compressor == nil { return nil, errors.Wrap(fmt.Errorf("no compressor registered for %s", compression.Algorithm.String()), 1) } compressedWriter, err := compressor.Apply(ctx.Writer(), compression.Quality) if err != nil { return nil, errors.Wrap(err, 1) } return wire.NewWriteContext(compressedWriter), nil }