Auto-generate files after cl/724363865
[google-protobuf.git] / rust / cpp_kernel / strings.cc
blobd1af5656b02c5b892eed97ece22765fe0f5332b9
1 #include "rust/cpp_kernel/strings.h"
3 #include <cstring>
4 #include <string>
6 #include "absl/strings/string_view.h"
7 #include "rust/cpp_kernel/rust_alloc_for_cpp_api.h"
9 namespace google {
10 namespace protobuf {
11 namespace rust {
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) {
26 if (src.empty()) {
27 data = nullptr;
28 len = 0;
29 } else {
30 void* d = proto2_rust_alloc(src.length(), 1);
31 std::memcpy(d, src.data(), src.length());
32 data = static_cast<char*>(d);
33 len = src.length();
37 } // namespace rust
38 } // namespace protobuf
39 } // namespace google
41 extern "C" {
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()};