From 31a0723fd515cac763b40176ebd9a269097dd136 Mon Sep 17 00:00:00 2001 From: Brian Cunnie Date: Sun, 4 Oct 2020 12:05:20 -0400 Subject: [PATCH] `QueryResponse()` uses named return values It's more of an experiment than anything else, but I like how it documents the purpose of the return value. --- src/xip/xip.go | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/src/xip/xip.go b/src/xip/xip.go index b40b954..ce49e35 100644 --- a/src/xip/xip.go +++ b/src/xip/xip.go @@ -53,31 +53,31 @@ func (e *DNSError) Error() string { // 78.46.204.247.33654: NS www.example.com → NS // 78.46.204.247.33654: SOA www.example.com → SOA // 2600::.33654: AAAA --1.sslip.io → ::1 -func QueryResponse(queryBytes []byte) ([]byte, string, error) { +func QueryResponse(queryBytes []byte) (responseBytes []byte, logMessage string, err error) { var queryHeader dnsmessage.Header - var err error var response []byte var p dnsmessage.Parser if queryHeader, err = p.Start(queryBytes); err != nil { - return nil, "", err + return } b := dnsmessage.NewBuilder(response, ResponseHeader(queryHeader, dnsmessage.RCodeSuccess)) b.EnableCompression() if err = b.StartQuestions(); err != nil { - return nil, "", err + return } for { - q, err := p.Question() + var q dnsmessage.Question + q, err = p.Question() if err == dnsmessage.ErrSectionDone { break } if err != nil { - return nil, "", err + return } if err = b.Question(q); err != nil { - return nil, "", err + return } err = processQuestion(q, &b) if err != nil { @@ -90,17 +90,18 @@ func QueryResponse(queryBytes []byte) ([]byte, string, error) { } else { // processQuestion shouldn't return any error but {nil,DNSError}, // but who knows? Someone might break contract. This is the guard. - return nil, "", errors.New("processQuestion() returned unexpected error type") + err = errors.New("processQuestion() returned unexpected error type") + return } } } - responseBytes, err := b.Finish() + responseBytes, err = b.Finish() // I couldn't figure an easy way to test this error condition in Ginkgo if err != nil { - return nil, "", err + return } - return responseBytes, "", nil + return } func processQuestion(q dnsmessage.Question, b *dnsmessage.Builder) error {