)]}'
{"go/middleware/fake.go":[{"author":{"_account_id":2828,"name":"Michael Barton","email":"mike@weirdlooking.com","username":"redbo"},"change_message_id":"32f6a5344d3195552e4589719c32b42eaab7936c","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"// Read fake data from File"},{"line_number":32,"context_line":"func (ctx *FakeBody) Read(p []byte) (n int, err error) {"},{"line_number":33,"context_line":"\tif ctx.Remaining \u003c\u003d 0 {"},{"line_number":34,"context_line":"\t\treturn 0, io.EOF"},{"line_number":35,"context_line":"\t}"},{"line_number":36,"context_line":""}],"source_content_type":"text/x-go","patch_set":2,"id":"1a122d0e_50dc0874","line":33,"range":{"start_line":33,"start_character":0,"end_line":33,"end_character":24},"updated":"2016-05-03 22:04:06.000000000","message":"Opening /dev/zero and reading from it is really inefficient.  I would just make a ZeroReader that\u0027s something like,\n\nfunc (ctx *ZeroReader) Read(p []byte) (int, error) {\n  for i :\u003d range p {\n    p[i] \u003d 0\n  }\n  return len(p), nil\n}\n\nThen wrap that in an io.LimitReader down below.","commit_id":"27583cd2ddd2e58112f9ccb1a8df99dc16e9a9dd"},{"author":{"_account_id":2828,"name":"Michael Barton","email":"mike@weirdlooking.com","username":"redbo"},"change_message_id":"32f6a5344d3195552e4589719c32b42eaab7936c","unresolved":false,"context_lines":[{"line_number":54,"context_line":"// the size, in bytes, that you want your object to be created with."},{"line_number":55,"context_line":"func FakeObject(next http.Handler) http.Handler {"},{"line_number":56,"context_line":"\treturn http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {"},{"line_number":57,"context_line":"\t\ts, fakeData :\u003d request.Header[\"Fake-Body\"]"},{"line_number":58,"context_line":"\t\tif request.Method !\u003d \"PUT\" || !fakeData {"},{"line_number":59,"context_line":"\t\t\tnext.ServeHTTP(writer, request)"},{"line_number":60,"context_line":"\t\t\treturn"}],"source_content_type":"text/x-go","patch_set":2,"id":"1a122d0e_8d804b8d","line":57,"range":{"start_line":57,"start_character":0,"end_line":57,"end_character":44},"updated":"2016-05-03 22:04:06.000000000","message":"I think if you prefix it with X-Backend-, it\u0027ll be enough to hide this \"feature\" from users.\n\nAlso you can use request.Header.Get(\"Fake-Body\") and you\u0027ll get back the first value, instead of a slice","commit_id":"27583cd2ddd2e58112f9ccb1a8df99dc16e9a9dd"},{"author":{"_account_id":2828,"name":"Michael Barton","email":"mike@weirdlooking.com","username":"redbo"},"change_message_id":"32f6a5344d3195552e4589719c32b42eaab7936c","unresolved":false,"context_lines":[{"line_number":66,"context_line":"\t\t\treturn"},{"line_number":67,"context_line":"\t\t}"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"\t\trequest.Header.Set(\"Content-Length\", string(size))"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"\t\tf, err :\u003d os.Open(\"/dev/zero\")"},{"line_number":72,"context_line":"\t\tif err !\u003d nil {"}],"source_content_type":"text/x-go","patch_set":2,"id":"1a122d0e_30beac00","line":69,"range":{"start_line":69,"start_character":2,"end_line":69,"end_character":9},"updated":"2016-05-03 22:04:06.000000000","message":"You can\u0027t just say string(size), you have to use strconv.FormatInt.  Or just set it to s.  Also you should set request.ContentLength to size.","commit_id":"27583cd2ddd2e58112f9ccb1a8df99dc16e9a9dd"},{"author":{"_account_id":2828,"name":"Michael Barton","email":"mike@weirdlooking.com","username":"redbo"},"change_message_id":"a47f09e3d9e4ddc7f93a72ec8bf026150580122a","unresolved":false,"context_lines":[{"line_number":87,"context_line":""},{"line_number":88,"context_line":"// NewFakeReadCloser reads size fake data."},{"line_number":89,"context_line":"func NewFakeReadCloser(size int64) io.ReadCloser {"},{"line_number":90,"context_line":"\treturn \u0026FakeReadCloser{FakeReader: io.LimitReader(\u0026ZeroReader{}, size)}"},{"line_number":91,"context_line":"}"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"// FakeReadCloser enables reading fake data."}],"source_content_type":"text/x-go","patch_set":4,"id":"dab17558_0520e29a","line":90,"range":{"start_line":90,"start_character":0,"end_line":90,"end_character":72},"updated":"2016-05-05 22:18:05.000000000","message":"You could also have it return ioutil.NopCloser(io.LimitReader(\u0026ZeroReader{}, size)) and you won\u0027t need the extra struct type.","commit_id":"4503d877cd4632e667def7ca4f487e9e73cb10f1"}]}
