docs/cluster/options.go

70 lines
1.5 KiB
Go

package cluster
import (
"net"
"os"
"strconv"
"strings"
)
// DriverOpts are key=values options
type DriverOpts []string
// String returns a string from the driver options
func (do DriverOpts) String(key, env string) (string, bool) {
for _, opt := range do {
kv := strings.SplitN(opt, "=", 2)
if kv[0] == key {
return kv[1], true
}
}
if env := os.Getenv(env); env != "" {
return env, true
}
return "", false
}
// Int returns an int64 from the driver options
func (do DriverOpts) Int(key, env string) (int64, bool) {
if value, ok := do.String(key, env); ok {
v, _ := strconv.ParseInt(value, 0, 64)
return v, true
}
return 0, false
}
// Uint returns an int64 from the driver options
func (do DriverOpts) Uint(key, env string) (uint64, bool) {
if value, ok := do.String(key, env); ok {
v, _ := strconv.ParseUint(value, 0, 64)
return v, true
}
return 0, false
}
// Float returns a float64 from the driver options
func (do DriverOpts) Float(key, env string) (float64, bool) {
if value, ok := do.String(key, env); ok {
v, _ := strconv.ParseFloat(value, 64)
return v, true
}
return 0.0, false
}
// IP returns an IP address from the driver options
func (do DriverOpts) IP(key, env string) (net.IP, bool) {
if value, ok := do.String(key, env); ok {
return net.ParseIP(value), true
}
return nil, false
}
// Bool returns a boolean from the driver options
func (do DriverOpts) Bool(key, env string) (bool, bool) {
if value, ok := do.String(key, env); ok {
b, _ := strconv.ParseBool(value)
return b, true
}
return false, false
}