github.com/jackc/puddle/v2@v2.2.2-0.20240301145809-72b022bcfc59/context.go (about)

     1  package puddle
     2  
     3  import (
     4  	"context"
     5  	"time"
     6  )
     7  
     8  // valueCancelCtx combines two contexts into one. One context is used for values and the other is used for cancellation.
     9  type valueCancelCtx struct {
    10  	valueCtx  context.Context
    11  	cancelCtx context.Context
    12  }
    13  
    14  func (ctx *valueCancelCtx) Deadline() (time.Time, bool) { return ctx.cancelCtx.Deadline() }
    15  func (ctx *valueCancelCtx) Done() <-chan struct{}       { return ctx.cancelCtx.Done() }
    16  func (ctx *valueCancelCtx) Err() error                  { return ctx.cancelCtx.Err() }
    17  func (ctx *valueCancelCtx) Value(key any) any           { return ctx.valueCtx.Value(key) }
    18  
    19  func newValueCancelCtx(valueCtx, cancelContext context.Context) context.Context {
    20  	return &valueCancelCtx{
    21  		valueCtx:  valueCtx,
    22  		cancelCtx: cancelContext,
    23  	}
    24  }