code: def pack_args(self, obj, *args, **kwargs):
          
          signature = self.__signature__
          #: No arguments expected
          if not signature:
              return (self.name, [])
  
          #: Build args, first is a string, subsequent are dictionaries
          method_name = [self.name]
          bridge_args = []
          for i, sig in enumerate(signature):
              if i == 0:
                  method_name.append(":")
                  bridge_args.append(msgpack_encoder(sig, args[0]))
                  continue
  
              #: Sig is a dict so we must pull out the matching kwarg
              found = False
              for k in sig:
                  if k in kwargs:
                      method_name.append("{}:".format(k))
                      bridge_args.append(msgpack_encoder(sig[k], kwargs[k]))
                      found = True
                      break
              if not found:
                  #: If we get here something is wrong
                  raise ValueError("Unexpected or missing argument at index {}. "
                                   "Expected {}".format(i, sig))
  
          return ("".join(method_name), bridge_args)
docs: Arguments must be packed according to the kwargs passed and
          the signature defined.