code: func NewProcessRoundTrip() *Process {
  	return NewProcessFunc(func(ctx context.Context, host string) error {
  		p, _ := ctx.Value(ProcessFuncIO).(*ProcessIO)
  
  		closers := []io.Closer{p.In.Closer}
  
  		defer func() {
  			for _, c := range closers {
  				_ = c.Close()
  			}
  		}()
  
  		c, err := new(net.Dialer).DialContext(ctx, "tcp", host)
  		if err != nil {
  			return err
  		}
  
  		closers = append(closers, c)
  
  		go func() {
  			<-ctx.Done()
  			if ctx.Err() == context.DeadlineExceeded {
  				_ = c.Close()
  			}
  		}()
  
  		_, err = io.Copy(c, p.In.Reader)
  		if err != nil {
  			return err
  		}
  
  		_, err = io.Copy(p.Out, c)
  		if err != nil {
  			return err
  		}
  
  		return nil
  	}).WithIO()
  }
docs: // NewProcessRoundTrip starts a Go function to implement a toolbox backed http.RoundTripper