Index: service/taskqueue/types.go |
diff --git a/service/taskqueue/types.go b/service/taskqueue/types.go |
index c8cde3996c2f3e96d8568ec529a2cc7b15b21f97..7bc6a130432d3738859b8175d262995a1419691e 100644 |
--- a/service/taskqueue/types.go |
+++ b/service/taskqueue/types.go |
@@ -97,3 +97,28 @@ type Task struct { |
// Retry options for this task. May be nil. |
RetryOptions *RetryOptions |
} |
+ |
+func (t *Task) Duplicate() *Task { |
+ ret := *t |
+ |
+ if len(t.Header) > 0 { |
+ ret.Header = make(http.Header, len(t.Header)) |
+ for k, vs := range t.Header { |
+ newVs := make([]string, len(vs)) |
+ copy(newVs, vs) |
+ ret.Header[k] = newVs |
+ } |
+ } |
+ |
+ if len(t.Payload) > 0 { |
+ ret.Payload = make([]byte, len(t.Payload)) |
+ copy(ret.Payload, t.Payload) |
+ } |
+ |
+ if t.RetryOptions != nil { |
+ ret.RetryOptions = &RetryOptions{} |
+ *ret.RetryOptions = *t.RetryOptions |
+ } |
+ |
+ return &ret |
+} |