IGUANA_INLINE constexpr std::string_view get_type_string()

in include/ylt/standalone/iguana/pb_writer.hpp [212:275]


IGUANA_INLINE constexpr std::string_view get_type_string() {
  if constexpr (std::is_integral_v<T>) {
    if constexpr (std::is_same_v<T, bool>) {
      return "bool";
    }
    else if constexpr (sizeof(T) <= 4) {
      if constexpr (std::is_unsigned_v<T>) {
        return "uint32";
      }
      else {
        return "int32";
      }
    }
    else {
      if constexpr (std::is_unsigned_v<T>) {
        return "uint64";
      }
      else {
        return "int64";
      }
    }
  }
  else if constexpr (std::is_same_v<T, iguana::sint32_t>) {
    return "sint32";
  }
  else if constexpr (std::is_same_v<T, iguana::sint64_t>) {
    return "sint64";
  }
  else if constexpr (std::is_same_v<T, iguana::fixed32_t>) {
    return "fixed32";
  }
  else if constexpr (std::is_same_v<T, iguana::fixed64_t>) {
    return "fixed64";
  }
  else if constexpr (std::is_same_v<T, iguana::sfixed32_t>) {
    return "sfixed32";
  }
  else if constexpr (std::is_same_v<T, iguana::sfixed64_t>) {
    return "sfixed64";
  }
  else if constexpr (std::is_same_v<T, std::string> ||
                     std::is_same_v<T, std::string_view>) {
    return "string";
  }
  else if constexpr (std::is_floating_point_v<T>) {
    return type_string<T>();
  }
  else {
    constexpr auto str_type_name = type_string<T>();
    constexpr size_t pos = str_type_name.rfind("::");
    if constexpr (pos != std::string_view::npos) {
      constexpr size_t pos = str_type_name.rfind("::") + 2;
      if constexpr (detail::is_signed_varint_v<T> || detail::is_fixed_v<T>) {
        return str_type_name.substr(pos, str_type_name.size() - pos - 2);
      }
      else {
        return str_type_name.substr(pos);
      }
    }
    else {
      return str_type_name;
    }
  }
}