Merge branch '8784-dir-listings'
[arvados.git] / sdk / go / httpserver / responsewriter.go
1 // Copyright (C) The Arvados Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: Apache-2.0
4
5 package httpserver
6
7 import (
8         "net/http"
9 )
10
11 // ResponseWriter wraps http.ResponseWriter and exposes the status
12 // sent, the number of bytes sent to the client, and the last write
13 // error.
14 type ResponseWriter struct {
15         http.ResponseWriter
16         wroteStatus    *int   // Last status given to WriteHeader()
17         wroteBodyBytes *int   // Bytes successfully written
18         err            *error // Last error returned from Write()
19 }
20
21 func WrapResponseWriter(orig http.ResponseWriter) ResponseWriter {
22         return ResponseWriter{orig, new(int), new(int), new(error)}
23 }
24
25 func (w ResponseWriter) WriteHeader(s int) {
26         *w.wroteStatus = s
27         w.ResponseWriter.WriteHeader(s)
28 }
29
30 func (w ResponseWriter) Write(data []byte) (n int, err error) {
31         n, err = w.ResponseWriter.Write(data)
32         *w.wroteBodyBytes += n
33         *w.err = err
34         return
35 }
36
37 func (w ResponseWriter) WroteStatus() int {
38         return *w.wroteStatus
39 }
40
41 func (w ResponseWriter) WroteBodyBytes() int {
42         return *w.wroteBodyBytes
43 }
44
45 func (w ResponseWriter) Err() error {
46         return *w.err
47 }