code: func (nc *Conn) Drain() error {
  	nc.mu.Lock()
  	defer nc.mu.Unlock()
  
  	if nc.isClosed() {
  		return ErrConnectionClosed
  	}
  	if nc.isConnecting() || nc.isReconnecting() {
  		return ErrConnectionReconnecting
  	}
  	if nc.isDraining() {
  		return nil
  	}
  
  	nc.status = DRAINING_SUBS
  	go nc.drainConnection()
  	return nil
  }
docs: // Drain will put a connection into a drain state. All subscriptions will
  // immediately be put into a drain state. Upon completion, the publishers
  // will be drained and can not publish any additional messages. Upon draining
  // of the publishers, the connection will be closed. Use the ClosedCB()
  // option to know when the connection has moved from draining to closed.