code: func (link *ToxicLink) Start(name string, source io.Reader, dest io.WriteCloser) {
  	go func() {
  		bytes, err := io.Copy(link.input, source)
  		if err != nil {
  			logrus.WithFields(logrus.Fields{
  				"name":  link.proxy.Name,
  				"bytes": bytes,
  				"err":   err,
  			}).Warn("Source terminated")
  		}
  		link.input.Close()
  	}()
  	for i, toxic := range link.toxics.chain[link.direction] {
  		if stateful, ok := toxic.Toxic.(toxics.StatefulToxic); ok {
  			link.stubs[i].State = stateful.NewState()
  		}
  
  		go link.stubs[i].Run(toxic)
  	}
  	go func() {
  		bytes, err := io.Copy(dest, link.output)
  		if err != nil {
  			logrus.WithFields(logrus.Fields{
  				"name":  link.proxy.Name,
  				"bytes": bytes,
  				"err":   err,
  			}).Warn("Destination terminated")
  		}
  		dest.Close()
  		link.toxics.RemoveLink(name)
  		link.proxy.RemoveConnection(name)
  	}()
  }
docs: // Start the link with the specified toxics