1package restful
2
3// Copyright 2015 Ernest Micklei. All rights reserved.
4// Use of this source code is governed by a license
5// that can be found in the LICENSE file.
6
7import (
8	"compress/gzip"
9	"compress/zlib"
10)
11
12// CompressorProvider describes a component that can provider compressors for the std methods.
13type CompressorProvider interface {
14	// Returns a *gzip.Writer which needs to be released later.
15	// Before using it, call Reset().
16	AcquireGzipWriter() *gzip.Writer
17
18	// Releases an acquired *gzip.Writer.
19	ReleaseGzipWriter(w *gzip.Writer)
20
21	// Returns a *gzip.Reader which needs to be released later.
22	AcquireGzipReader() *gzip.Reader
23
24	// Releases an acquired *gzip.Reader.
25	ReleaseGzipReader(w *gzip.Reader)
26
27	// Returns a *zlib.Writer which needs to be released later.
28	// Before using it, call Reset().
29	AcquireZlibWriter() *zlib.Writer
30
31	// Releases an acquired *zlib.Writer.
32	ReleaseZlibWriter(w *zlib.Writer)
33}
34
35// DefaultCompressorProvider is the actual provider of compressors (zlib or gzip).
36var currentCompressorProvider CompressorProvider
37
38func init() {
39	currentCompressorProvider = NewSyncPoolCompessors()
40}
41
42// CurrentCompressorProvider returns the current CompressorProvider.
43// It is initialized using a SyncPoolCompessors.
44func CurrentCompressorProvider() CompressorProvider {
45	return currentCompressorProvider
46}
47
48// SetCompressorProvider sets the actual provider of compressors (zlib or gzip).
49func SetCompressorProvider(p CompressorProvider) {
50	if p == nil {
51		panic("cannot set compressor provider to nil")
52	}
53	currentCompressorProvider = p
54}
55