From 13c269c19cd9b17481b49b27ed6546694cd2d613 Mon Sep 17 00:00:00 2001 From: "Matt T. Proud" Date: Wed, 30 Jan 2013 20:49:41 +0100 Subject: [PATCH] Include Daniel's ResponseWriter delegate type. --- contributor/responsewriter_delegator.go | 38 +++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 contributor/responsewriter_delegator.go diff --git a/contributor/responsewriter_delegator.go b/contributor/responsewriter_delegator.go new file mode 100644 index 0000000..100036b --- /dev/null +++ b/contributor/responsewriter_delegator.go @@ -0,0 +1,38 @@ +/* +Copyright (c) 2013, Matt T. Proud +All rights reserved. + +Use of this source code is governed by a BSD-style license that can be found in +the LICENSE file. +*/ + +package contributor + +import ( + "net/http" + "strconv" +) + +const ( + unknownStatusCode = "unknown" +) + +// ResponseWriterDelegator is a means of wrapping http.ResponseWriter to divine +// the response code from a given answer, especially in systems where the +// response is treated as a blackbox. +type ResponseWriterDelegator struct { + http.ResponseWriter + Status *string +} + +func (r ResponseWriterDelegator) WriteHeader(code int) { + *r.Status = strconv.Itoa(code) + + r.ResponseWriter.WriteHeader(code) +} + +func NewResponseWriterDelegator(delegate http.ResponseWriter) ResponseWriterDelegator { + defaultStatusCode := unknownStatusCode + + return ResponseWriterDelegator{delegate, &defaultStatusCode} +}