compression.go 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. // Copyright (C) 2015 The Protocol Authors.
  2. package protocol
  3. import "fmt"
  4. type Compression int
  5. const (
  6. CompressMetadata Compression = iota // zero value is the default, default should be "metadata"
  7. CompressNever
  8. CompressAlways
  9. compressionThreshold = 128 // don't bother compressing messages smaller than this many bytes
  10. )
  11. var compressionMarshal = map[Compression]string{
  12. CompressNever: "never",
  13. CompressMetadata: "metadata",
  14. CompressAlways: "always",
  15. }
  16. var compressionUnmarshal = map[string]Compression{
  17. // Legacy
  18. "false": CompressNever,
  19. "true": CompressMetadata,
  20. // Current
  21. "never": CompressNever,
  22. "metadata": CompressMetadata,
  23. "always": CompressAlways,
  24. }
  25. func (c Compression) String() string {
  26. s, ok := compressionMarshal[c]
  27. if !ok {
  28. return fmt.Sprintf("unknown:%d", c)
  29. }
  30. return s
  31. }
  32. func (c Compression) GoString() string {
  33. return fmt.Sprintf("%q", c.String())
  34. }
  35. func (c Compression) MarshalText() ([]byte, error) {
  36. return []byte(compressionMarshal[c]), nil
  37. }
  38. func (c *Compression) UnmarshalText(bs []byte) error {
  39. *c = compressionUnmarshal[string(bs)]
  40. return nil
  41. }