You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
18 lines
334 B
Go
18 lines
334 B
Go
4 years ago
|
package contextx
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
func ShrinkDeadline(ctx context.Context, timeout time.Duration) (context.Context, func()) {
|
||
|
if deadline, ok := ctx.Deadline(); ok {
|
||
|
leftTime := time.Until(deadline)
|
||
|
if leftTime < timeout {
|
||
|
timeout = leftTime
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return context.WithDeadline(ctx, time.Now().Add(timeout))
|
||
|
}
|