compressors.go 1.4 KB

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