forked from toolshed/abra
		
	
		
			
				
	
	
		
			64 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package opts
 | |
| 
 | |
| import (
 | |
| 	"errors"
 | |
| 	"time"
 | |
| )
 | |
| 
 | |
| // PositiveDurationOpt is an option type for time.Duration that uses a pointer.
 | |
| // It behave similarly to DurationOpt but only allows positive duration values.
 | |
| type PositiveDurationOpt struct {
 | |
| 	DurationOpt
 | |
| }
 | |
| 
 | |
| // Set a new value on the option. Setting a negative duration value will cause
 | |
| // an error to be returned.
 | |
| func (d *PositiveDurationOpt) Set(s string) error {
 | |
| 	err := d.DurationOpt.Set(s)
 | |
| 	if err != nil {
 | |
| 		return err
 | |
| 	}
 | |
| 	if *d.DurationOpt.value < 0 {
 | |
| 		return errors.New("duration cannot be negative")
 | |
| 	}
 | |
| 	return nil
 | |
| }
 | |
| 
 | |
| // DurationOpt is an option type for time.Duration that uses a pointer. This
 | |
| // allows us to get nil values outside, instead of defaulting to 0
 | |
| type DurationOpt struct {
 | |
| 	value *time.Duration
 | |
| }
 | |
| 
 | |
| // NewDurationOpt creates a DurationOpt with the specified duration
 | |
| func NewDurationOpt(value *time.Duration) *DurationOpt {
 | |
| 	return &DurationOpt{
 | |
| 		value: value,
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // Set a new value on the option
 | |
| func (d *DurationOpt) Set(s string) error {
 | |
| 	v, err := time.ParseDuration(s)
 | |
| 	d.value = &v
 | |
| 	return err
 | |
| }
 | |
| 
 | |
| // Type returns the type of this option, which will be displayed in `--help` output
 | |
| func (*DurationOpt) Type() string {
 | |
| 	return "duration"
 | |
| }
 | |
| 
 | |
| // String returns a string repr of this option
 | |
| func (d *DurationOpt) String() string {
 | |
| 	if d.value != nil {
 | |
| 		return d.value.String()
 | |
| 	}
 | |
| 	return ""
 | |
| }
 | |
| 
 | |
| // Value returns the time.Duration
 | |
| func (d *DurationOpt) Value() *time.Duration {
 | |
| 	return d.value
 | |
| }
 |