code: func (s *Service) Publish(topic string, payload []byte, qos packet.QOS, retain bool) GenericFuture {
  	msg := &packet.Message{
  		Topic:   topic,
  		Payload: payload,
  		QOS:     qos,
  		Retain:  retain,
  	}
  
  	return s.PublishMessage(msg)
  }
docs: // Publish will send a Publish packet containing the passed parameters. It will
  // return a PublishFuture that gets completed once the quality of service flow
  // has been completed.