docs: def _build_type(type_, value, property_path=None):
      """ Builds the schema definition based on the given type for the given value.
  
      :param type_: The type of the value
      :param value: The value to build the schema definition for
      :param List[str] property_path: The property path of the current type,
          defaults to None, optional
      :return: The built schema definition
      :rtype: Dict[str, Any]
      """
  
      if not property_path:
          property_path = []
  
      for (type_check, builder) in (
          (is_enum_type, _build_enum_type),
          (is_null_type, _build_null_type),
          (is_bool_type, _build_bool_type),
          (is_string_type, _build_string_type),
          (is_integer_type, _build_integer_type),
          (is_number_type, _build_number_type),
          (is_array_type, _build_array_type),
          (is_object_type, _build_object_type),
      ):
          if type_check(type_):
              return builder(value, property_path=property_path)
  
      # NOTE: warning ignores type None (as that is the config var default)
      if type_:
          warnings.warn(f"unhandled translation for type {type_!r} with value {value!r}")
      return {}