compression.go 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. // Copyright (C) 2015 The Syncthing Authors.
  2. //
  3. // This Source Code Form is subject to the terms of the Mozilla Public
  4. // License, v. 2.0. If a copy of the MPL was not distributed with this file,
  5. // You can obtain one at https://mozilla.org/MPL/2.0/.
  6. package config
  7. import (
  8. "github.com/syncthing/syncthing/lib/protocol"
  9. )
  10. type Compression int32
  11. const (
  12. CompressionMetadata Compression = 0
  13. CompressionNever Compression = 1
  14. CompressionAlways Compression = 2
  15. )
  16. var compressionMarshal = map[Compression]string{
  17. CompressionNever: "never",
  18. CompressionMetadata: "metadata",
  19. CompressionAlways: "always",
  20. }
  21. var compressionUnmarshal = map[string]Compression{
  22. // Legacy
  23. "false": CompressionNever,
  24. "true": CompressionMetadata,
  25. // Current
  26. "never": CompressionNever,
  27. "metadata": CompressionMetadata,
  28. "always": CompressionAlways,
  29. }
  30. func (c Compression) MarshalText() ([]byte, error) {
  31. return []byte(compressionMarshal[c]), nil
  32. }
  33. func (c *Compression) UnmarshalText(bs []byte) error {
  34. *c = compressionUnmarshal[string(bs)]
  35. return nil
  36. }
  37. func (c Compression) ToProtocol() protocol.Compression {
  38. switch c {
  39. case CompressionNever:
  40. return protocol.CompressionNever
  41. case CompressionAlways:
  42. return protocol.CompressionAlways
  43. case CompressionMetadata:
  44. return protocol.CompressionMetadata
  45. default:
  46. return protocol.CompressionMetadata
  47. }
  48. }