pkg/tc-properties/properties.go (38 lines of code) (raw):
package tc_properties
import (
"fmt"
)
// A Properties contains the key/value pairs from the properties input.
// All values are stored in unexpanded form and are expanded at runtime
type Properties struct {
// Stores the key/value pairs
m map[string]string
// WriteSeparator specifies the separator of key and value while writing the properties.
WriteSeparator string
}
// NewProperties creates a new Properties struct with the default
// configuration for "${key}" expressions.
func NewProperties() *Properties {
return &Properties{
m: map[string]string{},
}
}
// Get returns the expanded value for the given key if exists.
// Otherwise, ok is false.
func (p *Properties) Get(key string) (string, bool) {
v, ok := p.m[key]
return v, ok
}
// GetString returns the expanded value for the given key if exists or
// the default value otherwise.
func (p *Properties) GetString(key, def string) string {
if v, ok := p.Get(key); ok {
return v
}
return def
}
// Keys returns all keys in the same order as in the input.
func (p *Properties) Keys() []string {
keys := make([]string, 0, len(p.m))
for k := range p.m {
keys = append(keys, k)
}
return keys
}
// String returns a string of all expanded 'key = value' pairs.
func (p *Properties) String() string {
var s string
for key := range p.m {
value, _ := p.Get(key)
s = fmt.Sprintf("%s%s = %s\n", s, key, value)
}
return s
}