headers.go 962 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. package httptoo
  2. import (
  3. "fmt"
  4. "strings"
  5. "time"
  6. )
  7. type Visibility int
  8. const (
  9. Default = 0
  10. Public = 1
  11. Private = 2
  12. )
  13. type CacheControlHeader struct {
  14. MaxAge time.Duration
  15. Caching Visibility
  16. NoStore bool
  17. }
  18. func (me *CacheControlHeader) caching() []string {
  19. switch me.Caching {
  20. case Public:
  21. return []string{"public"}
  22. case Private:
  23. return []string{"private"}
  24. default:
  25. return nil
  26. }
  27. }
  28. func (me *CacheControlHeader) maxAge() []string {
  29. if me.MaxAge == 0 {
  30. return nil
  31. }
  32. d := me.MaxAge
  33. if d < 0 {
  34. d = 0
  35. }
  36. return []string{fmt.Sprintf("max-age=%d", d/time.Second)}
  37. }
  38. func (me *CacheControlHeader) noStore() []string {
  39. if me.NoStore {
  40. return []string{"no-store"}
  41. }
  42. return nil
  43. }
  44. func (me *CacheControlHeader) concat(sss ...[]string) (ret []string) {
  45. for _, ss := range sss {
  46. ret = append(ret, ss...)
  47. }
  48. return
  49. }
  50. func (me CacheControlHeader) String() string {
  51. return strings.Join(me.concat(me.caching(), me.maxAge()), ", ")
  52. }