package util

import "time"

// Clock is a clock to measure elapsed time.
// It is a shorthand for the time.Since() and time.Now() combo.
type Clock struct {
	t time.Time
}

// NewClock returns a new clock.
// It also starts it.
func NewClock() (c *Clock) {
	return &Clock{t: time.Now()}
}

// Restart resets the start time.
// It also returns the elapsed time.
func (c *Clock) Restart() (t time.Duration) {
	t = time.Since(c.t)
	c.t = time.Now()
	return
}

// Elapsed returns the elapsed time.
func (c *Clock) Elapsed() time.Duration {
	return time.Since(c.t)
}