Add report type
This commit is contained in:
		
							
								
								
									
										11
									
								
								convert.go
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								convert.go
									
									
									
									
									
								
							@@ -1,5 +1,16 @@
 | 
				
			|||||||
package taf
 | 
					package taf
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func convertReportType(s string) ReportType {
 | 
				
			||||||
 | 
						switch s {
 | 
				
			||||||
 | 
						case "AMD":
 | 
				
			||||||
 | 
							return Amended
 | 
				
			||||||
 | 
						case "COR":
 | 
				
			||||||
 | 
							return Corrected
 | 
				
			||||||
 | 
						default:
 | 
				
			||||||
 | 
							return ""
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func convertSkyConditionType(s string) SkyConditionType {
 | 
					func convertSkyConditionType(s string) SkyConditionType {
 | 
				
			||||||
	switch s {
 | 
						switch s {
 | 
				
			||||||
	case "FEW":
 | 
						case "FEW":
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,7 +5,8 @@ import (
 | 
				
			|||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var lex = lexer.MustSimple([]lexer.SimpleRule{
 | 
					var lex = lexer.MustSimple([]lexer.SimpleRule{
 | 
				
			||||||
	{Name: "header", Pattern: `TAF (AMD|COR)? ?`},
 | 
						{Name: "header", Pattern: `TAF ?`},
 | 
				
			||||||
 | 
						{Name: "Type", Pattern: "AMD|COR"},
 | 
				
			||||||
	{Name: "Remark", Pattern: `RMK[^\n]*`},
 | 
						{Name: "Remark", Pattern: `RMK[^\n]*`},
 | 
				
			||||||
	{Name: "Number", Pattern: `\d+`},
 | 
						{Name: "Number", Pattern: `\d+`},
 | 
				
			||||||
	{Name: "Modifier", Pattern: `[+-]|VC`},
 | 
						{Name: "Modifier", Pattern: `[+-]|VC`},
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,6 +6,7 @@ import (
 | 
				
			|||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type AST struct {
 | 
					type AST struct {
 | 
				
			||||||
 | 
						Type  *string `(@Type WS)?`
 | 
				
			||||||
	Items []*Item `@@*`
 | 
						Items []*Item `@@*`
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								taf.go
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								taf.go
									
									
									
									
									
								
							@@ -92,6 +92,10 @@ func DecodeWithOptions(r io.Reader, opts Options) (*Forecast, error) {
 | 
				
			|||||||
	fc := &Forecast{}
 | 
						fc := &Forecast{}
 | 
				
			||||||
	out := reflect.ValueOf(fc).Elem()
 | 
						out := reflect.ValueOf(fc).Elem()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if ast.Type != nil {
 | 
				
			||||||
 | 
							fc.ReportType = convertReportType(*ast.Type)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for _, item := range ast.Items {
 | 
						for _, item := range ast.Items {
 | 
				
			||||||
		switch {
 | 
							switch {
 | 
				
			||||||
		case item.ID != nil:
 | 
							case item.ID != nil:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -207,6 +207,7 @@ func TestZGSZ(t *testing.T) {
 | 
				
			|||||||
  TEMPO 2204/2208 TSRA SCT020 FEW023CB`
 | 
					  TEMPO 2204/2208 TSRA SCT020 FEW023CB`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	expected := &Forecast{
 | 
						expected := &Forecast{
 | 
				
			||||||
 | 
							ReportType: Amended,
 | 
				
			||||||
		Identifier: "ZGSZ",
 | 
							Identifier: "ZGSZ",
 | 
				
			||||||
		Airport: airports.Airport{
 | 
							Airport: airports.Airport{
 | 
				
			||||||
			ICAO:      "ZGSZ",
 | 
								ICAO:      "ZGSZ",
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										13
									
								
								types.go
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								types.go
									
									
									
									
									
								
							@@ -9,6 +9,9 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// Forecast represents a Terminal Aerodrome Forecast (TAF) weather report for a specific airport.
 | 
					// Forecast represents a Terminal Aerodrome Forecast (TAF) weather report for a specific airport.
 | 
				
			||||||
type Forecast struct {
 | 
					type Forecast struct {
 | 
				
			||||||
 | 
						// ReportType represents the type of report this forecast describes.
 | 
				
			||||||
 | 
						ReportType ReportType `json:"report_type,omitempty"`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Identifier holds the ICAO airport identifier for which this forecast was issued.
 | 
						// Identifier holds the ICAO airport identifier for which this forecast was issued.
 | 
				
			||||||
	Identifier string `json:"identifier,omitempty"`
 | 
						Identifier string `json:"identifier,omitempty"`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -130,6 +133,16 @@ type Visibility struct {
 | 
				
			|||||||
	Unit units.Distance `json:"unit,omitempty"`
 | 
						Unit units.Distance `json:"unit,omitempty"`
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// ReportType represents different types of reports.
 | 
				
			||||||
 | 
					type ReportType string
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const (
 | 
				
			||||||
 | 
						// Amended represents a report issued when the previous report is no longer accurate.
 | 
				
			||||||
 | 
						Amended ReportType = "Amended"
 | 
				
			||||||
 | 
						// Corrected represents a correction to a previous report.
 | 
				
			||||||
 | 
						Corrected ReportType = "Corrected"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// SkyConditionType represents different types of sky conditions in the forecast.
 | 
					// SkyConditionType represents different types of sky conditions in the forecast.
 | 
				
			||||||
type SkyConditionType string
 | 
					type SkyConditionType string
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user