compressors.go 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  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. // CompressorProvider describes a component that can provider compressors for the std methods.
  10. type CompressorProvider interface {
  11. // Returns a *gzip.Writer which needs to be released later.
  12. // Before using it, call Reset().
  13. AcquireGzipWriter() *gzip.Writer
  14. // Releases an aqcuired *gzip.Writer.
  15. ReleaseGzipWriter(w *gzip.Writer)
  16. // Returns a *gzip.Reader which needs to be released later.
  17. AcquireGzipReader() *gzip.Reader
  18. // Releases an aqcuired *gzip.Reader.
  19. ReleaseGzipReader(w *gzip.Reader)
  20. // Returns a *zlib.Writer which needs to be released later.
  21. // Before using it, call Reset().
  22. AcquireZlibWriter() *zlib.Writer
  23. // Releases an aqcuired *zlib.Writer.
  24. ReleaseZlibWriter(w *zlib.Writer)
  25. }
  26. // DefaultCompressorProvider is the actual provider of compressors (zlib or gzip).
  27. var currentCompressorProvider CompressorProvider
  28. func init() {
  29. currentCompressorProvider = NewSyncPoolCompessors()
  30. }
  31. // CurrentCompressorProvider returns the current CompressorProvider.
  32. // It is initialized using a SyncPoolCompessors.
  33. func CurrentCompressorProvider() CompressorProvider {
  34. return currentCompressorProvider
  35. }
  36. // CompressorProvider sets the actual provider of compressors (zlib or gzip).
  37. func SetCompressorProvider(p CompressorProvider) {
  38. if p == nil {
  39. panic("cannot set compressor provider to nil")
  40. }
  41. currentCompressorProvider = p
  42. }