mirror

Mirror free and open-source projects you like with minimal effort
git clone git://git.server.ky/slackcoder/mirror
Log | Files | Refs | README

time.go (1077B)


      1 package service
      2 
      3 import (
      4 	"math/rand"
      5 	"time"
      6 )
      7 
      8 type Duration struct {
      9 	time.Duration
     10 }
     11 
     12 func DurationRef(v time.Duration) *Duration {
     13 	return &Duration{v}
     14 }
     15 
     16 func (s Duration) MarshalText() ([]byte, error) {
     17 	return []byte(s.Duration.String()), nil
     18 }
     19 
     20 func (s *Duration) Max(args ...*Duration) Duration {
     21 	m := s
     22 
     23 	for _, o := range args {
     24 		if m.Duration < o.Duration {
     25 			v := o
     26 			m = v
     27 		}
     28 	}
     29 
     30 	return *m
     31 }
     32 
     33 func (s *Duration) Min(args ...*Duration) Duration {
     34 	m := s
     35 
     36 	for _, o := range args {
     37 		if m.Duration > o.Duration {
     38 			v := o
     39 			m = v
     40 		}
     41 	}
     42 
     43 	return *m
     44 }
     45 
     46 func (s *Duration) UnmarshalText(text []byte) error {
     47 	v, err := time.ParseDuration(string(text))
     48 	if err != nil {
     49 		return err
     50 	}
     51 	*s = Duration{v}
     52 
     53 	return nil
     54 }
     55 
     56 // Randomly generate a duration between from and until.
     57 //
     58 // Returns from if its greater than until.
     59 func RandomDuration(from Duration, until Duration) Duration {
     60 	if from.Duration >= until.Duration {
     61 		return from
     62 	}
     63 
     64 	period := until.Duration - from.Duration
     65 	return Duration{from.Duration + time.Duration(rand.Intn(int(period)))}
     66 
     67 }