Skip to content

Commit e7cc91b

Browse files
refactor: stable sorting (#3)
* refactor: simplify sorting * stable sort by qtype Signed-off-by: Bruno Schaatsbergen <[email protected]> --------- Signed-off-by: Bruno Schaatsbergen <[email protected]> Co-authored-by: Bruno Schaatsbergen <[email protected]>
1 parent 6fdfbd2 commit e7cc91b

File tree

2 files changed

+29
-37
lines changed

2 files changed

+29
-37
lines changed

cmd/printer.go

+23-27
Original file line numberDiff line numberDiff line change
@@ -12,47 +12,43 @@ import (
1212
"github.com/miekg/dns"
1313
)
1414

15-
// printRecords prints the DNS records to the terminal.
16-
func printRecords(domainName string, messages []*dns.Msg) {
15+
// printRecord prints the DNS records to the terminal.
16+
func printRecord(domainName string, answer dns.RR) {
1717
w := ansiterm.NewTabWriter(os.Stdout, 8, 8, 4, ' ', 0)
1818
w.SetColorCapable(true)
1919

2020
domainColored := color.HiBlueString(domainName)
2121

22-
for _, msg := range messages {
23-
for _, answer := range msg.Answer {
24-
queryType := dns.TypeToString[answer.Header().Rrtype]
25-
formattedTTL := color.HiMagentaString(formatTTL(answer.Header().Ttl))
22+
recordType := dns.TypeToString[answer.Header().Rrtype]
23+
formattedTTL := color.HiMagentaString(formatTTL(answer.Header().Ttl))
2624

27-
switch rec := answer.(type) {
28-
case *dns.A:
29-
printARecord(w, queryType, domainColored, formattedTTL, rec)
25+
switch rec := answer.(type) {
26+
case *dns.A:
27+
printARecord(w, recordType, domainColored, formattedTTL, rec)
3028

31-
case *dns.AAAA:
32-
printAAAARecord(w, queryType, domainColored, formattedTTL, rec)
29+
case *dns.AAAA:
30+
printAAAARecord(w, recordType, domainColored, formattedTTL, rec)
3331

34-
case *dns.CNAME:
35-
printCNAMERecord(w, queryType, domainColored, formattedTTL, rec)
32+
case *dns.CNAME:
33+
printCNAMERecord(w, recordType, domainColored, formattedTTL, rec)
3634

37-
case *dns.MX:
38-
printMXRecord(w, queryType, domainColored, formattedTTL, rec)
35+
case *dns.MX:
36+
printMXRecord(w, recordType, domainColored, formattedTTL, rec)
3937

40-
case *dns.TXT:
41-
printTXTRecord(w, queryType, domainColored, formattedTTL, rec)
38+
case *dns.TXT:
39+
printTXTRecord(w, recordType, domainColored, formattedTTL, rec)
4240

43-
case *dns.NS:
44-
printNSRecord(w, queryType, domainColored, formattedTTL, rec)
41+
case *dns.NS:
42+
printNSRecord(w, recordType, domainColored, formattedTTL, rec)
4543

46-
case *dns.SOA:
47-
printSOARecord(w, queryType, domainColored, formattedTTL, rec)
44+
case *dns.SOA:
45+
printSOARecord(w, recordType, domainColored, formattedTTL, rec)
4846

49-
case *dns.PTR:
50-
printPTRRecord(w, queryType, domainColored, formattedTTL, rec)
47+
case *dns.PTR:
48+
printPTRRecord(w, recordType, domainColored, formattedTTL, rec)
5149

52-
default:
53-
fmt.Fprintf(os.Stderr, "Unknown record type: %s\n", queryType)
54-
}
55-
}
50+
default:
51+
fmt.Fprintf(os.Stderr, "Unknown record type: %s\n", recordType)
5652
}
5753

5854
w.Flush()

cmd/root.go

+6-10
Original file line numberDiff line numberDiff line change
@@ -86,19 +86,15 @@ var (
8686
os.Exit(1)
8787
}
8888

89-
// Sort the messages by resource record type
9089
sort.SliceStable(messages, func(i, j int) bool {
91-
if len(messages[i].Answer) == 0 {
92-
return false
93-
}
94-
if len(messages[j].Answer) == 0 {
95-
return true
96-
}
97-
return messages[i].Answer[0].Header().Rrtype < messages[j].Answer[0].Header().Rrtype
90+
return messages[i].Question[0].Qtype < messages[j].Question[0].Qtype
9891
})
9992

100-
// Print the records
101-
printRecords(args[0], messages)
93+
for _, m := range messages {
94+
for _, record := range m.Answer {
95+
printRecord(args[0], record)
96+
}
97+
}
10298
},
10399
}
104100
)

0 commit comments

Comments
 (0)