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} +}