diff options
| author | Adnan Maolood <[email protected]> | 2021-02-18 00:07:43 -0500 |
|---|---|---|
| committer | Adnan Maolood <[email protected]> | 2021-02-18 00:07:43 -0500 |
| commit | aab3ac4dfe17e9eb82e39ac7ff322498f3b149fd (patch) | |
| tree | 711299034dfab29b9c9719dd4d986329434db03a /response.go | |
| parent | response: Rename statusCode to status (diff) | |
| download | go-gemini-aab3ac4dfe17e9eb82e39ac7ff322498f3b149fd.tar.xz go-gemini-aab3ac4dfe17e9eb82e39ac7ff322498f3b149fd.zip | |
response: Implement Write method
Diffstat (limited to 'response.go')
| -rw-r--r-- | response.go | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/response.go b/response.go index b02b507..17e2155 100644 --- a/response.go +++ b/response.go @@ -3,6 +3,7 @@ package gemini import ( "bufio" "crypto/tls" + "fmt" "io" "strconv" ) @@ -135,6 +136,24 @@ func (b *readCloserBody) Read(p []byte) (n int, err error) { return b.ReadCloser.Read(p) } +// Write writes r to w in the Gemini response format, including the +// header and body. +// +// This method consults the Status, Meta, and Body fields of the response. +// The Response Body is closed after it is sent. +func (r *Response) Write(w io.Writer) error { + if _, err := fmt.Fprintf(w, "%02d %s\r\n", r.Status, r.Meta); err != nil { + return err + } + if r.Body != nil { + defer r.Body.Close() + if _, err := io.Copy(w, r.Body); err != nil { + return err + } + } + return nil +} + // A ResponseWriter interface is used by a Gemini handler to construct // a Gemini response. // |