compressors.go 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  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 acquired *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 acquired *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 acquired *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. // SetCompressorProvider 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. }