refactor: Rename AFTN struct field from "Text" to "Body"
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
package parsers
|
||||
|
||||
import (
|
||||
"caatsm/internal/domain"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// ParseHeader parses the header of the message and returns a ParsedMessage struct
|
||||
func ParseHeader(fullMessage string) domain.ParsedMessage {
|
||||
var (
|
||||
startIndicator string
|
||||
messageID string
|
||||
dateTime string
|
||||
priorityIndicator string
|
||||
primaryAddress string
|
||||
secondaryAddresses []string
|
||||
originator string
|
||||
originatorDateTime string
|
||||
bodyAndFooter strings.Builder
|
||||
headerEnded bool
|
||||
)
|
||||
|
||||
fullMessage = strings.TrimSpace(fullMessage)
|
||||
lines := strings.Split(fullMessage, "\n")
|
||||
|
||||
for lineCounter, line := range lines {
|
||||
switch lineCounter {
|
||||
case 0:
|
||||
if strings.HasPrefix(line, "ZCZC") {
|
||||
parts := strings.Fields(line)
|
||||
if len(parts) >= 3 {
|
||||
startIndicator = parts[0]
|
||||
messageID = parts[1]
|
||||
dateTime = parts[2]
|
||||
}
|
||||
}
|
||||
case 1:
|
||||
parts := strings.Fields(line)
|
||||
if len(parts) >= 2 {
|
||||
priorityIndicator = parts[0]
|
||||
primaryAddress = parts[1]
|
||||
}
|
||||
default:
|
||||
if !headerEnded {
|
||||
if strings.TrimSpace(line) == "." {
|
||||
continue
|
||||
} else if strings.HasPrefix(line, ".") {
|
||||
originatorInfo := strings.Fields(line[1:])
|
||||
if len(originatorInfo) >= 2 {
|
||||
originator = originatorInfo[0]
|
||||
originatorDateTime = originatorInfo[1]
|
||||
}
|
||||
headerEnded = true
|
||||
} else if strings.HasPrefix(line, "BEGIN PART") || strings.HasPrefix(line, "(") {
|
||||
headerEnded = true
|
||||
bodyAndFooter.WriteString(line + "\n")
|
||||
} else {
|
||||
secondaryAddresses = append(secondaryAddresses, line)
|
||||
}
|
||||
} else {
|
||||
bodyAndFooter.WriteString(line + "\n")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return domain.ParsedMessage{
|
||||
StartIndicator: startIndicator,
|
||||
MessageID: messageID,
|
||||
DateTime: dateTime,
|
||||
PriorityIndicator: priorityIndicator,
|
||||
PrimaryAddress: primaryAddress,
|
||||
SecondaryAddresses: secondaryAddresses,
|
||||
Originator: originator,
|
||||
OriginatorDateTime: originatorDateTime,
|
||||
BodyAndFooter: bodyAndFooter.String(),
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user