docs: def _read_msg(self, method_frame, with_consumer_tag=False,
                    with_message_count=False):
          '''
          Support method to read a Message from the current frame buffer.
          Will return a Message, or re-queue current frames and raise a
          FrameUnderflow. Takes an optional argument on whether to read the
          consumer tag so it can be used for both deliver and get-ok.
          '''
          header_frame, body = self._reap_msg_frames(method_frame)
  
          if with_consumer_tag:
              consumer_tag = method_frame.args.read_shortstr()
          delivery_tag = method_frame.args.read_longlong()
          redelivered = method_frame.args.read_bit()
          exchange = method_frame.args.read_shortstr()
          routing_key = method_frame.args.read_shortstr()
          if with_message_count:
              message_count = method_frame.args.read_long()
  
          delivery_info = {
              'channel': self.channel,
              'delivery_tag': delivery_tag,
              'redelivered': redelivered,
              'exchange': exchange,
              'routing_key': routing_key,
          }
          if with_consumer_tag:
              delivery_info['consumer_tag'] = consumer_tag
          if with_message_count:
              delivery_info['message_count'] = message_count
  
          return Message(body=body, delivery_info=delivery_info,
                         **header_frame.properties)