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
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setProb := 0
|
||||||
fc := &Forecast{}
|
fc := &Forecast{}
|
||||||
out := reflect.ValueOf(fc).Elem()
|
out := reflect.ValueOf(fc).Elem()
|
||||||
|
|
||||||
@ -291,6 +292,13 @@ func DecodeWithOptions(r io.Reader, opts Options) (*Forecast, error) {
|
|||||||
Type: convertChangeType(item.Change.Type),
|
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
|
// FM changes don't have a valid pair, they only come with a single time string
|
||||||
if ch.Type == From {
|
if ch.Type == From {
|
||||||
t, err := parseTime(item.Change.Time, opts.Month, opts.Year)
|
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()
|
out = reflect.ValueOf(ch).Elem()
|
||||||
case item.Probability != nil:
|
case item.Probability != nil:
|
||||||
// If the time is empty, this probability belongs to the
|
// If the time is empty, this probability belongs to the
|
||||||
// previous change.
|
// next change.
|
||||||
if item.Probability.Time == "" {
|
if item.Probability.Time == "" {
|
||||||
prob, err := strconv.Atoi(item.Probability.Value)
|
prob, err := strconv.Atoi(item.Probability.Value)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, participle.Errorf(item.Probability.Pos, "prob: %s", err)
|
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 {
|
} else {
|
||||||
pr := &Probability{}
|
pr := &Probability{}
|
||||||
|
|
||||||
|
@ -520,7 +520,6 @@ func TestUUEE(t *testing.T) {
|
|||||||
Altitude: 400,
|
Altitude: 400,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Probability: 40,
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Type: Temporary,
|
Type: Temporary,
|
||||||
@ -538,6 +537,7 @@ func TestUUEE(t *testing.T) {
|
|||||||
Obscuration: Fog,
|
Obscuration: Fog,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
Probability: 40,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Type: Becoming,
|
Type: Becoming,
|
||||||
@ -553,7 +553,6 @@ func TestUUEE(t *testing.T) {
|
|||||||
Speed: 6,
|
Speed: 6,
|
||||||
Unit: units.MetersPerSecond,
|
Unit: units.MetersPerSecond,
|
||||||
},
|
},
|
||||||
Probability: 40,
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Type: Temporary,
|
Type: Temporary,
|
||||||
@ -576,6 +575,7 @@ func TestUUEE(t *testing.T) {
|
|||||||
Precipitation: Rain,
|
Precipitation: Rain,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
Probability: 40,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@ -651,7 +651,6 @@ func TestEGLL(t *testing.T) {
|
|||||||
Altitude: 700,
|
Altitude: 700,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Probability: 30,
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Type: Temporary,
|
Type: Temporary,
|
||||||
@ -670,6 +669,7 @@ func TestEGLL(t *testing.T) {
|
|||||||
Altitude: 400,
|
Altitude: 400,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
Probability: 30,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Type: Becoming,
|
Type: Becoming,
|
||||||
|
Loading…
Reference in New Issue
Block a user