63 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			63 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
	
| package options
 | |
| 
 | |
| import (
 | |
| 	"fmt"
 | |
| 	"strconv"
 | |
| 	"time"
 | |
| )
 | |
| 
 | |
| // SecretSource references an individual secret value.
 | |
| // Only one source within the struct should be defined at any time.
 | |
| type SecretSource struct {
 | |
| 	// Value expects a base64 encoded string value.
 | |
| 	Value []byte `json:"value,omitempty"`
 | |
| 
 | |
| 	// FromEnv expects the name of an environment variable.
 | |
| 	FromEnv string `json:"fromEnv,omitempty"`
 | |
| 
 | |
| 	// FromFile expects a path to a file containing the secret value.
 | |
| 	FromFile string `json:"fromFile,omitempty"`
 | |
| }
 | |
| 
 | |
| // Duration is an alias for time.Duration so that we can ensure the marshalling
 | |
| // and unmarshalling of string durations is done as users expect.
 | |
| // Intentional blank line below to keep this first part of the comment out of
 | |
| // any generated references.
 | |
| 
 | |
| // Duration is as string representation of a period of time.
 | |
| // A duration string is a is a possibly signed sequence of decimal numbers,
 | |
| // each with optional fraction and a unit suffix, such as "300ms", "-1.5h" or "2h45m".
 | |
| // Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h".
 | |
| type Duration time.Duration
 | |
| 
 | |
| // UnmarshalJSON parses the duration string and sets the value of duration
 | |
| // to the value of the duration string.
 | |
| func (d *Duration) UnmarshalJSON(data []byte) error {
 | |
| 	input := string(data)
 | |
| 	if unquoted, err := strconv.Unquote(input); err == nil {
 | |
| 		input = unquoted
 | |
| 	}
 | |
| 
 | |
| 	du, err := time.ParseDuration(input)
 | |
| 	if err != nil {
 | |
| 		return err
 | |
| 	}
 | |
| 	*d = Duration(du)
 | |
| 	return nil
 | |
| }
 | |
| 
 | |
| // MarshalJSON ensures that when the string is marshalled to JSON as a human
 | |
| // readable string.
 | |
| func (d *Duration) MarshalJSON() ([]byte, error) {
 | |
| 	dStr := fmt.Sprintf("%q", d.Duration().String())
 | |
| 	return []byte(dStr), nil
 | |
| }
 | |
| 
 | |
| // Duration returns the time.Duration version of this Duration
 | |
| func (d *Duration) Duration() time.Duration {
 | |
| 	if d == nil {
 | |
| 		return time.Duration(0)
 | |
| 	}
 | |
| 	return time.Duration(*d)
 | |
| }
 |