Fix handling of PROB groups
This commit is contained in:
parent
48d68b810b
commit
b23007a81a
13
taf.go
13
taf.go
@ -88,6 +88,7 @@ func DecodeWithOptions(r io.Reader, opts Options) (*Forecast, error) {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
setProb := 0
|
||||
fc := &Forecast{}
|
||||
out := reflect.ValueOf(fc).Elem()
|
||||
|
||||
@ -291,6 +292,13 @@ func DecodeWithOptions(r io.Reader, opts Options) (*Forecast, error) {
|
||||
Type: convertChangeType(item.Change.Type),
|
||||
}
|
||||
|
||||
// if setProb is set, add the probability within it to the change,
|
||||
// then reset the variable.
|
||||
if setProb != 0 {
|
||||
ch.Probability = setProb
|
||||
setProb = 0
|
||||
}
|
||||
|
||||
// FM changes don't have a valid pair, they only come with a single time string
|
||||
if ch.Type == From {
|
||||
t, err := parseTime(item.Change.Time, opts.Month, opts.Year)
|
||||
@ -313,13 +321,14 @@ func DecodeWithOptions(r io.Reader, opts Options) (*Forecast, error) {
|
||||
out = reflect.ValueOf(ch).Elem()
|
||||
case item.Probability != nil:
|
||||
// If the time is empty, this probability belongs to the
|
||||
// previous change.
|
||||
// next change.
|
||||
if item.Probability.Time == "" {
|
||||
prob, err := strconv.Atoi(item.Probability.Value)
|
||||
if err != nil {
|
||||
return nil, participle.Errorf(item.Probability.Pos, "prob: %s", err)
|
||||
}
|
||||
setField(out, "Probability", prob)
|
||||
// Set the setProb variable. This will let the decoder know to add it to the next change.
|
||||
setProb = prob
|
||||
} else {
|
||||
pr := &Probability{}
|
||||
|
||||
|
@ -520,7 +520,6 @@ func TestUUEE(t *testing.T) {
|
||||
Altitude: 400,
|
||||
},
|
||||
},
|
||||
Probability: 40,
|
||||
},
|
||||
{
|
||||
Type: Temporary,
|
||||
@ -538,6 +537,7 @@ func TestUUEE(t *testing.T) {
|
||||
Obscuration: Fog,
|
||||
},
|
||||
},
|
||||
Probability: 40,
|
||||
},
|
||||
{
|
||||
Type: Becoming,
|
||||
@ -553,7 +553,6 @@ func TestUUEE(t *testing.T) {
|
||||
Speed: 6,
|
||||
Unit: units.MetersPerSecond,
|
||||
},
|
||||
Probability: 40,
|
||||
},
|
||||
{
|
||||
Type: Temporary,
|
||||
@ -576,6 +575,7 @@ func TestUUEE(t *testing.T) {
|
||||
Precipitation: Rain,
|
||||
},
|
||||
},
|
||||
Probability: 40,
|
||||
},
|
||||
},
|
||||
}
|
||||
@ -651,7 +651,6 @@ func TestEGLL(t *testing.T) {
|
||||
Altitude: 700,
|
||||
},
|
||||
},
|
||||
Probability: 30,
|
||||
},
|
||||
{
|
||||
Type: Temporary,
|
||||
@ -670,6 +669,7 @@ func TestEGLL(t *testing.T) {
|
||||
Altitude: 400,
|
||||
},
|
||||
},
|
||||
Probability: 30,
|
||||
},
|
||||
{
|
||||
Type: Becoming,
|
||||
|
Loading…
Reference in New Issue
Block a user