blob: 1ee8d665d66e3cc805d80c321a8565c36b756aee [file] [log] [blame]
Jiri Simsa574ec4b2015-08-11 09:31:37 -07001// Copyright 2015 The Vanadium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5package pubsub
6
7import (
8 "fmt"
9
10 "time"
11)
12
13// Format formats a Setting in a consistent manner, it is intended to be
14// used when implementing the Setting interface.
15func Format(s Setting) string {
16 return fmt.Sprintf("%s: %s: (%T: %s)", s.Name(), s.Description(), s.Value(), s.Value())
17}
18
19// Type Any can be used to represent or implement a Setting of any type.
20type Any struct {
21 name, description string
22 value interface{}
23}
24
25func (s *Any) String() string {
26 return Format(s)
27}
28
29func (s *Any) Name() string {
30 return s.name
31}
32
33func (s *Any) Description() string {
34 return s.description
35}
36
37func (s *Any) Value() interface{} {
38 return s.value
39}
40
41func NewAny(name, description string, value interface{}) Setting {
42 return &Any{name, description, value}
43}
44
45func NewInt(name, description string, value int) Setting {
46 return &Any{name, description, value}
47}
48
49func NewInt64(name, description string, value int64) Setting {
50 return &Any{name, description, value}
51}
52
53func NewBool(name, description string, value bool) Setting {
54 return &Any{name, description, value}
55}
56
57func NewFloat64(name, description string, value float64) Setting {
58 return &Any{name, description, value}
59}
60
61func NewString(name, description string, value string) Setting {
62 return &Any{name, description, value}
63}
64
65func NewDuration(name, description string, value time.Duration) Setting {
66 return &Any{name, description, value}
67}
68
69// DurationFlag implements flag.Value in order to provide validation of
70// duration values in the flag package.
71type DurationFlag struct{ time.Duration }
72
73// Implements flag.Value.Get
74func (d DurationFlag) Get() interface{} {
75 return d.Duration
76}
77
78// Implements flag.Value.Set
79func (d *DurationFlag) Set(s string) error {
80 duration, err := time.ParseDuration(s)
81 if err != nil {
82 return err
83 }
84 d.Duration = duration
85 return nil
86}
87
88// Implements flag.Value.String
89func (d DurationFlag) String() string {
90 return d.Duration.String()
91}