From 8db90635718c1b9e0f6216ce60f973ee88fb8bab Mon Sep 17 00:00:00 2001 From: stephen mcquay Date: Wed, 20 Apr 2016 09:37:55 -0600 Subject: [PATCH] Added TimeoutReader Fixes #1. --- trash.go | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/trash.go b/trash.go index a27518b..adbbc6a 100644 --- a/trash.go +++ b/trash.go @@ -1,6 +1,10 @@ +// Package trash provides simple readers with meaningless output. package trash -import "io" +import ( + "io" + "time" +) func init() { Reader = &reader{} @@ -9,13 +13,36 @@ func init() { // Reader provides a steady stream of trash (non-random bytes) when read from var Reader io.Reader +// TimeoutReader returns a reader that returns io.EOF after dur. +func TimeoutReader(dur time.Duration) io.Reader { + return &timeoutReader{timeout: time.Now().Add(dur)} +} + type reader struct{} func (r *reader) Read(p []byte) (int, error) { c := 0 + var err error for i := 0; i < len(p); i++ { c++ p[i] = 0xca } - return c, nil + return c, err +} + +type timeoutReader struct { + timeout time.Time +} + +func (tor *timeoutReader) Read(p []byte) (int, error) { + c := 0 + var err error + for i := 0; i < len(p); i++ { + c++ + p[i] = 0xca + } + if time.Now().After(tor.timeout) { + err = io.EOF + } + return c, err }