blob: 1ee8d665d66e3cc805d80c321a8565c36b756aee [file] [log] [blame]
// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package pubsub
import (
"fmt"
"time"
)
// Format formats a Setting in a consistent manner, it is intended to be
// used when implementing the Setting interface.
func Format(s Setting) string {
return fmt.Sprintf("%s: %s: (%T: %s)", s.Name(), s.Description(), s.Value(), s.Value())
}
// Type Any can be used to represent or implement a Setting of any type.
type Any struct {
name, description string
value interface{}
}
func (s *Any) String() string {
return Format(s)
}
func (s *Any) Name() string {
return s.name
}
func (s *Any) Description() string {
return s.description
}
func (s *Any) Value() interface{} {
return s.value
}
func NewAny(name, description string, value interface{}) Setting {
return &Any{name, description, value}
}
func NewInt(name, description string, value int) Setting {
return &Any{name, description, value}
}
func NewInt64(name, description string, value int64) Setting {
return &Any{name, description, value}
}
func NewBool(name, description string, value bool) Setting {
return &Any{name, description, value}
}
func NewFloat64(name, description string, value float64) Setting {
return &Any{name, description, value}
}
func NewString(name, description string, value string) Setting {
return &Any{name, description, value}
}
func NewDuration(name, description string, value time.Duration) Setting {
return &Any{name, description, value}
}
// DurationFlag implements flag.Value in order to provide validation of
// duration values in the flag package.
type DurationFlag struct{ time.Duration }
// Implements flag.Value.Get
func (d DurationFlag) Get() interface{} {
return d.Duration
}
// Implements flag.Value.Set
func (d *DurationFlag) Set(s string) error {
duration, err := time.ParseDuration(s)
if err != nil {
return err
}
d.Duration = duration
return nil
}
// Implements flag.Value.String
func (d DurationFlag) String() string {
return d.Duration.String()
}