code: func (c *command) errorWithFallback(ctx context.Context, err error) {
  	eventType := "failure"
  	if err == ErrCircuitOpen {
  		eventType = "short-circuit"
  	} else if err == ErrMaxConcurrency {
  		eventType = "rejected"
  	} else if err == ErrTimeout {
  		eventType = "timeout"
  	} else if err == context.Canceled {
  		eventType = "context_canceled"
  	} else if err == context.DeadlineExceeded {
  		eventType = "context_deadline_exceeded"
  	}
  
  	c.reportEvent(eventType)
  	fallbackErr := c.tryFallback(ctx, err)
  	if fallbackErr != nil {
  		c.errChan <- fallbackErr
  	}
  }
docs: // errorWithFallback triggers the fallback while reporting the appropriate metric events.