1 #include "rust/cpp_kernel/strings.h"
6 #include "absl/strings/string_view.h"
7 #include "rust/cpp_kernel/rust_alloc_for_cpp_api.h"
13 std::string
PtrAndLen::CopyToString() const {
14 return len
== 0 ? "" : std::string(ptr
, len
);
17 absl::string_view
PtrAndLen::AsStringView() const {
18 return absl::string_view(len
== 0 ? nullptr : ptr
, len
);
21 void PtrAndLen::PlacementNewString(void* location
) {
22 new (location
) std::string(len
== 0 ? nullptr : ptr
, len
);
25 RustStringRawParts::RustStringRawParts(std::string src
) {
30 void* d
= proto2_rust_alloc(src
.length(), 1);
31 std::memcpy(d
, src
.data(), src
.length());
32 data
= static_cast<char*>(d
);
38 } // namespace protobuf
42 std::string
* proto2_rust_cpp_new_string(google::protobuf::rust::PtrAndLen src
) {
43 return new std::string(src
.CopyToString());
46 void proto2_rust_cpp_delete_string(std::string
* str
) { delete str
; }
48 google::protobuf::rust::PtrAndLen
proto2_rust_cpp_string_to_view(std::string
* str
) {
49 return google::protobuf::rust::PtrAndLen
{str
->data(), str
->length()};