docs: def _read_returned_msg(self, method_frame):
          '''
          Support method to read a returned (basic.return) Message from the
          current frame buffer. Will return a Message with return_info, or
          re-queue current frames and raise a FrameUnderflow.
  
          :returns: Message with the return_info attribute set, where return_info
            is a dict with the following properties:
              'channel': Channel instance
              'reply_code': reply code (int)
              'reply_text': reply text
              'exchange': exchange name
              'routing_key': routing key
          '''
          header_frame, body = self._reap_msg_frames(method_frame)
  
          return_info = {
              'channel': self.channel,
              'reply_code': method_frame.args.read_short(),
              'reply_text': method_frame.args.read_shortstr(),
              'exchange': method_frame.args.read_shortstr(),
              'routing_key': method_frame.args.read_shortstr()
          }
  
          return Message(body=body, return_info=return_info,
                         **header_frame.properties)