add metar request/response to protocol

This commit is contained in:
Reese Norris
2024-04-09 15:14:09 -07:00
parent 2861947057
commit ed3eee721f
4 changed files with 293 additions and 0 deletions

43
protocol/metar_request.go Normal file
View File

@@ -0,0 +1,43 @@
package protocol
import (
"fmt"
"strings"
)
type MetarRequestPDU struct {
From string `validate:"required,alphanum,max=7"`
To string `validate:"required,alphanum,max=7"`
Station string `validate:"required,alphanum,max=4"`
}
func (p *MetarRequestPDU) Serialize() string {
return fmt.Sprintf("$AX%s:%s:METAR:%s%s", p.From, p.To, p.Station, PacketDelimeter)
}
func ParseMetarRequestPDU(rawPacket string) (*MetarRequestPDU, error) {
rawPacket = strings.TrimSuffix(rawPacket, PacketDelimeter)
rawPacket = strings.TrimPrefix(rawPacket, "$AX")
fields := strings.Split(rawPacket, Delimeter)
if len(fields) != 4 {
return nil, NewGenericFSDError(SyntaxError)
}
if fields[2] != "METAR" {
return nil, NewGenericFSDError(SyntaxError)
}
pdu := MetarRequestPDU{
From: fields[0],
To: fields[1],
Station: fields[3],
}
err := V.Struct(pdu)
if err != nil {
return nil, NewGenericFSDError(SyntaxError)
}
return &pdu, nil
}