104 using SourceT = std::remove_cv_t<std::remove_reference_t<From>>;
105 using Src = std::conditional_t<std::is_same_v<std::decay_t<SourceT>,
char*>
106 || std::is_same_v<std::decay_t<SourceT>,
const char*>,
107 const char*, SourceT>;
109 "Convert only supports String, std::string, std::string_view, and const char*");
111 if constexpr (std::is_same_v<To, void>) {
113 if constexpr (std::is_same_v<Src, String>) {
114 return std::string(from.utf8().data(), from.utf8().length());
115 }
else if constexpr (std::is_same_v<Src, std::string> ||
116 std::is_same_v<Src, std::string_view>) {
117 return String(from.data(), from.length());
118 }
else if constexpr (std::is_same_v<Src, const char*>) {
127 "Convert only supports String, std::string, std::string_view, and const char*");
129 if constexpr (std::is_same_v<To, Src>) {
131 }
else if constexpr (std::is_same_v<To, String>) {
132 if constexpr (std::is_same_v<Src, const char*>) {
135 return String(from.data(), from.length());
137 }
else if constexpr (std::is_same_v<To, std::string>) {
138 if constexpr (std::is_same_v<Src, String>) {
139 return std::string(from.utf8().data(), from.utf8().length());
140 }
else if constexpr (std::is_same_v<Src, const char*>) {
141 return std::string(from);
143 return std::string(from);
145 }
else if constexpr (std::is_same_v<To, std::string_view>) {
146 if constexpr (std::is_same_v<Src, String>) {
147 return std::string_view(from.utf8().data(), from.utf8().length());
148 }
else if constexpr (std::is_same_v<Src, const char*>) {
149 return std::string_view(from);
151 return std::string_view(from);
153 }
else if constexpr (std::is_same_v<To, const char*>) {
154 static_assert(!std::is_same_v<To, const char*>,
155 "Direct conversion to const char* is not supported due to ownership issues. "
156 "Convert to String, std::string, or std::string_view instead.");
std::ostream & operator<<(std::ostream &os, const ultralight::String &str)
Stream output operator for ultralight::String.
Definition StringSTL.h:189
std::istream & operator>>(std::istream &is, ultralight::String &str)
Stream input operator for ultralight::String.
Definition StringSTL.h:202