From 768ec6c17b662b3a62173ce0a3527f221404c249 Mon Sep 17 00:00:00 2001 From: Adnan Maolood Date: Sun, 28 Feb 2021 22:16:38 -0500 Subject: [PATCH] Make Request implement io.WriterTo --- client.go | 2 +- request.go | 21 +++++++++++++-------- request_test.go | 2 +- 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/client.go b/client.go index 86eb844..a40e3b9 100644 --- a/client.go +++ b/client.go @@ -153,7 +153,7 @@ func (c *Client) do(ctx context.Context, conn net.Conn, req *Request) (*Response } // Write the request - if err := req.Write(w); err != nil { + if _, err := req.WriteTo(w); err != nil { return nil, err } diff --git a/request.go b/request.go index b022a31..e539675 100644 --- a/request.go +++ b/request.go @@ -77,21 +77,26 @@ func ReadRequest(r io.Reader) (*Request, error) { return &Request{URL: u}, nil } -// Write writes a Gemini request in wire format. +// WriteTo writes r to w in the Gemini request format. // This method consults the request URL only. -func (r *Request) Write(w io.Writer) error { +func (r *Request) WriteTo(w io.Writer) (int, error) { bw := bufio.NewWriterSize(w, 1026) url := r.URL.String() if len(url) > 1024 { - return ErrInvalidRequest + return 0, ErrInvalidRequest } - if _, err := bw.WriteString(url); err != nil { - return err + var wrote int + n, err := bw.WriteString(url) + wrote += n + if err != nil { + return wrote, err } - if _, err := bw.Write(crlf); err != nil { - return err + n, err = bw.Write(crlf) + wrote += n + if err != nil { + return wrote, err } - return bw.Flush() + return wrote, bw.Flush() } // Conn returns the network connection on which the request was received. diff --git a/request_test.go b/request_test.go index 3497ed6..90ca57a 100644 --- a/request_test.go +++ b/request_test.go @@ -119,7 +119,7 @@ func TestWriteRequest(t *testing.T) { t.Logf("%s", test.Req.URL) var b strings.Builder bw := bufio.NewWriter(&b) - err := test.Req.Write(bw) + _, err := test.Req.WriteTo(bw) if err != test.Err { t.Errorf("expected err = %v, got %v", test.Err, err) }