package accesslog import ( "strconv" "github.com/yusing/go-proxy/internal/gperr" "github.com/yusing/go-proxy/internal/utils/strutils" ) type Retention struct { Days uint64 `json:"days"` Last uint64 `json:"last"` } var ( ErrInvalidSyntax = gperr.New("invalid syntax") ErrZeroValue = gperr.New("zero value") ) var defaultChunkSize = 64 * 1024 // 64KB // Syntax: // // days|weeks|months // // last // // Parse implements strutils.Parser. func (r *Retention) Parse(v string) (err error) { split := strutils.SplitSpace(v) if len(split) != 2 { return ErrInvalidSyntax.Subject(v) } switch split[0] { case "last": r.Last, err = strconv.ParseUint(split[1], 10, 64) default: // days|weeks|months r.Days, err = strconv.ParseUint(split[0], 10, 64) if err != nil { return } switch split[1] { case "days": case "weeks": r.Days *= 7 case "months": r.Days *= 30 default: return ErrInvalidSyntax.Subject("unit " + split[1]) } } if r.Days == 0 && r.Last == 0 { return ErrZeroValue } return }