62 lines
962 B
Go
62 lines
962 B
Go
package httptoo
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
type Visibility int
|
|
|
|
const (
|
|
Default = 0
|
|
Public = 1
|
|
Private = 2
|
|
)
|
|
|
|
type CacheControlHeader struct {
|
|
MaxAge time.Duration
|
|
Caching Visibility
|
|
NoStore bool
|
|
}
|
|
|
|
func (me *CacheControlHeader) caching() []string {
|
|
switch me.Caching {
|
|
case Public:
|
|
return []string{"public"}
|
|
case Private:
|
|
return []string{"private"}
|
|
default:
|
|
return nil
|
|
}
|
|
}
|
|
|
|
func (me *CacheControlHeader) maxAge() []string {
|
|
if me.MaxAge == 0 {
|
|
return nil
|
|
}
|
|
d := me.MaxAge
|
|
if d < 0 {
|
|
d = 0
|
|
}
|
|
return []string{fmt.Sprintf("max-age=%d", d/time.Second)}
|
|
}
|
|
|
|
func (me *CacheControlHeader) noStore() []string {
|
|
if me.NoStore {
|
|
return []string{"no-store"}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (me *CacheControlHeader) concat(sss ...[]string) (ret []string) {
|
|
for _, ss := range sss {
|
|
ret = append(ret, ss...)
|
|
}
|
|
return
|
|
}
|
|
|
|
func (me CacheControlHeader) String() string {
|
|
return strings.Join(me.concat(me.caching(), me.maxAge()), ", ")
|
|
}
|