1010#include < string_view>
1111#include < type_traits>
1212
13- // #include "../Box.hpp"
1413#include " ../Bytestring.hpp"
15- // #include "../Ref.hpp"
16- // #include "../Result.hpp"
1714#include " ../Vectorstring.hpp"
1815#include " ../always_false.hpp"
19- #include " ../internal/is_literal.hpp"
20- // #include "../internal/ptr_cast.hpp"
2116#include " ../common.hpp"
17+ #include " ../internal/is_literal.hpp"
2218
2319namespace rfl ::capnproto {
2420
@@ -193,7 +189,7 @@ class RFL_API Writer {
193189 auto entries =
194190 OutputArrayType{_parent->val_ .get (" entries" ).as <capnp::DynamicList>()};
195191 auto new_entry = add_object_to_array (2 , &entries);
196- add_value_to_object (" key" , std::string ( _name) , &new_entry);
192+ add_value_to_object (" key" , _name, &new_entry);
197193 return add_value_to_object (" value" , _var, &new_entry);
198194 }
199195
@@ -202,20 +198,22 @@ class RFL_API Writer {
202198 const T& _var,
203199 OutputObjectType* _parent) const {
204200 if constexpr (std::is_same<std::remove_cvref_t <T>, std::string>()) {
205- _parent->val_ .set (_name. data ( ), _var.c_str ());
201+ _parent->val_ .set (to_kj_string_ptr (_name ), _var.c_str ());
206202
207203 } else if constexpr (std::is_same<std::remove_cvref_t <T>,
208204 rfl::Bytestring>()) {
209205 const auto array_ptr = kj::ArrayPtr<const kj::byte>(
210206 internal::ptr_cast<const unsigned char *>(_var.data ()), _var.size ());
211- _parent->val_ .set (_name.data (), capnp::Data::Reader (array_ptr));
207+ _parent->val_ .set (to_kj_string_ptr (_name),
208+ capnp::Data::Reader (array_ptr));
212209
213210 } else if constexpr (std::is_floating_point<std::remove_cvref_t <T>>() ||
214211 std::is_same<std::remove_cvref_t <T>, bool >()) {
215- _parent->val_ .set (_name. data ( ), _var);
212+ _parent->val_ .set (to_kj_string_ptr (_name ), _var);
216213
217214 } else if constexpr (std::is_integral<std::remove_cvref_t <T>>()) {
218- _parent->val_ .set (_name.data (), static_cast <std::int64_t >(_var));
215+ _parent->val_ .set (to_kj_string_ptr (_name),
216+ static_cast <std::int64_t >(_var));
219217
220218 } else if constexpr (internal::is_literal_v<T>) {
221219 return add_value_to_object (_name, _var.value (), _parent);
@@ -262,6 +260,11 @@ class RFL_API Writer {
262260
263261 void end_object (OutputObjectType* /* _obj*/ ) const {}
264262
263+ private:
264+ kj::StringPtr to_kj_string_ptr (const std::string_view& _str) const {
265+ return kj::StringPtr (_str.data (), _str.size ());
266+ }
267+
265268 private:
266269 capnp::DynamicStruct::Builder* root_;
267270};
0 commit comments