@@ -54,7 +54,7 @@ template <typename R> consteval auto expand(R range) {
5454
5555template <class T >
5656 requires (ContainerButNotString<T>)
57- constexpr void atom (StringBuilder &b, const T &t) {
57+ constexpr void atom (string_builder &b, const T &t) {
5858 if (t.size () == 0 ) {
5959 b.append_unescaped (" []" );
6060 return ;
@@ -72,11 +72,11 @@ template <class T>
7272 requires (std::is_same_v<T, std::string> ||
7373 std::is_same_v<T, std::string_view> ||
7474 std::is_same_v<T, const char *>)
75- constexpr void atom (StringBuilder &b, const T &t) {
75+ constexpr void atom (string_builder &b, const T &t) {
7676 b.append (t);
7777}
7878
79- template <arithmetic T> constexpr void atom (StringBuilder &b, const T t) {
79+ template <arithmetic T> constexpr void atom (string_builder &b, const T t) {
8080 b.append (t);
8181}
8282
@@ -85,7 +85,7 @@ template <class T>
8585 !std::is_same_v<T, std::string> &&
8686 !std::is_same_v<T, std::string_view> &&
8787 !std::is_same_v<T, const char *>)
88- constexpr void atom (StringBuilder &b, const T &t) {
88+ constexpr void atom (string_builder &b, const T &t) {
8989 int i = 0 ;
9090 b.append (' {' );
9191 [:expand (std::meta::nonstatic_data_members_of (^T)):] >> [&]<auto dm> {
@@ -103,7 +103,7 @@ constexpr void atom(StringBuilder &b, const T &t) {
103103}
104104
105105// works for struct
106- template <class Z > void fast_to_json_string (StringBuilder &b, const Z &z) {
106+ template <class Z > void fast_to_json_string (string_builder &b, const Z &z) {
107107 int i = 0 ;
108108 b.append (' {' );
109109 [:expand (std::meta::nonstatic_data_members_of (^Z)):] >> [&]<auto dm> {
@@ -123,7 +123,7 @@ template <class Z> void fast_to_json_string(StringBuilder &b, const Z &z) {
123123// works for container
124124template <class Z >
125125 requires (ContainerButNotString<Z>)
126- void fast_to_json_string (StringBuilder &b, const Z &z) {
126+ void fast_to_json_string (string_builder &b, const Z &z) {
127127 if (z.size () == 0 ) {
128128 b.append_unescaped (" []" );
129129 return ;
@@ -137,6 +137,20 @@ void fast_to_json_string(StringBuilder &b, const Z &z) {
137137 b.append (' ]' );
138138}
139139
140+ template <class Z >
141+ std::string to_json_string (const Z &z) {
142+ string_builder b;
143+ fast_to_json_string (b, z);
144+ return std::string (b);
145+ }
146+
147+ template <class Z >
148+ void to_json (const Z &z, std::string &s) {
149+ string_builder b;
150+ fast_to_json_string (b, z);
151+ s.assign (b.view ());
152+ }
153+
140154} // namespace json_builder
141155
142156} // namespace simdjson
0 commit comments