code: func NewRequest(client context.Client, options ...ReqContextOptions) (reqContext.Context, reqContext.CancelFunc) {
  
  	//'-1' to get default config timeout when timeout options not passed
  	reqCtxOpts := requestContextOpts{timeoutType: -1}
  	for _, option := range options {
  		option(&reqCtxOpts)
  	}
  
  	parentContext := reqCtxOpts.parentContext
  	if parentContext == nil {
  		//when parent request context not set, use background context
  		parentContext = reqContext.Background()
  	}
  
  	var timeout time.Duration
  	if reqCtxOpts.timeout > 0 {
  		timeout = reqCtxOpts.timeout
  	} else if timeoutOverride := requestTimeoutOverride(parentContext, reqCtxOpts.timeoutType); timeoutOverride > 0 {
  		timeout = timeoutOverride
  	} else {
  		timeout = client.EndpointConfig().Timeout(reqCtxOpts.timeoutType)
  	}
  
  	ctx := reqContext.WithValue(parentContext, reqContextCommManager, client.InfraProvider().CommManager())
  	ctx = reqContext.WithValue(ctx, reqContextClient, client)
  	ctx, cancel := reqContext.WithTimeout(ctx, timeout)
  
  	return ctx, cancel
  }
docs: // NewRequest creates a request-scoped context.