docs: def _convert(self, desired_type: Type[T], source_obj: S, logger: Logger, options: Dict[str, Dict[str, Any]]) -> T:
          """
          Delegates to the user-provided method. Passes the appropriate part of the options according to the
          function name.
  
          :param desired_type:
          :param source_obj:
          :param logger:
          :param options:
          :return:
          """
          try:
              if self.unpack_options:
                  opts = self.get_applicable_options(options)
                  if self.function_args is not None:
                      return self.conversion_method(desired_type, source_obj, logger, **self.function_args, **opts)
                  else:
                      return self.conversion_method(desired_type, source_obj, logger, **opts)
              else:
                  if self.function_args is not None:
                      return self.conversion_method(desired_type, source_obj, logger, options, **self.function_args)
                  else:
                      return self.conversion_method(desired_type, source_obj, logger, options)
  
          except TypeError as e:
              raise CaughtTypeError.create(self.conversion_method, e)