-
Notifications
You must be signed in to change notification settings - Fork 4
/
parameter.go
53 lines (45 loc) · 1.28 KB
/
parameter.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
package meteomatics
import "strings"
// A ParameterString is a string representing a parameter.
type ParameterString string
// A ParameterStringer can be converted to a ParameterString.
type ParameterStringer interface {
ParameterString() ParameterString
}
// ParameterString returns s as a ParameterString.
func (s ParameterString) ParameterString() ParameterString {
return s
}
// A ParameterSlice is a slice of ParameterStringers.
type ParameterSlice []ParameterStringer
// ParameterString returns s as a ParameterString.
func (s ParameterSlice) ParameterString() ParameterString {
ss := make([]string, len(s))
for i, ps := range s {
ss[i] = string(ps.ParameterString())
}
return ParameterString(strings.Join(ss, ","))
}
// A Parameter is a parameter.
type Parameter struct {
Name ParameterName
Level LevelStringer
Interval IntervalStringer
Units Units
}
// ParameterString returns p as a ParameterString.
func (p Parameter) ParameterString() ParameterString {
ps := string(p.Name)
if p.Level != nil {
if level := p.Level.LevelString(); level != "" {
ps += "_" + string(level)
}
}
if p.Interval != nil {
if interval := p.Interval.IntervalString(); interval != "" {
ps += "_" + string(interval)
}
}
ps += ":" + string(p.Units)
return ParameterString(ps)
}