code: func persistOutbound(s Store, m packets.ControlPacket) {
  	switch m.Details().Qos {
  	case 0:
  		switch m.(type) {
  		case *packets.PubackPacket, *packets.PubcompPacket:
  			// Sending puback. delete matching publish
  			// from ibound
  			s.Del(inboundKeyFromMID(m.Details().MessageID))
  		}
  	case 1:
  		switch m.(type) {
  		case *packets.PublishPacket, *packets.PubrelPacket, *packets.SubscribePacket, *packets.UnsubscribePacket:
  			// Sending publish. store in obound
  			// until puback received
  			s.Put(outboundKeyFromMID(m.Details().MessageID), m)
  		default:
  			ERROR.Println(STR, "Asked to persist an invalid message type")
  		}
  	case 2:
  		switch m.(type) {
  		case *packets.PublishPacket:
  			// Sending publish. store in obound
  			// until pubrel received
  			s.Put(outboundKeyFromMID(m.Details().MessageID), m)
  		default:
  			ERROR.Println(STR, "Asked to persist an invalid message type")
  		}
  	}
  }
docs: // govern which outgoing messages are persisted