Protocol Buffers - Google's data interchange format (grpc依赖)
https://developers.google.com/protocol-buffers/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
38 lines
913 B
38 lines
913 B
#include "rust/cpp_kernel/strings.h" |
|
|
|
#include <cstring> |
|
#include <string> |
|
|
|
#include "rust/cpp_kernel/rust_alloc_for_cpp_api.h" |
|
|
|
namespace google { |
|
namespace protobuf { |
|
namespace rust { |
|
|
|
RustStringRawParts::RustStringRawParts(std::string src) { |
|
if (src.empty()) { |
|
data = nullptr; |
|
len = 0; |
|
} else { |
|
void* d = proto2_rust_alloc(src.length(), 1); |
|
std::memcpy(d, src.data(), src.length()); |
|
data = static_cast<char*>(d); |
|
len = src.length(); |
|
} |
|
} |
|
|
|
} // namespace rust |
|
} // namespace protobuf |
|
} // namespace google |
|
|
|
extern "C" { |
|
std::string* proto2_rust_cpp_new_string(google::protobuf::rust::PtrAndLen src) { |
|
return new std::string(src.ptr, src.len); |
|
} |
|
|
|
void proto2_rust_cpp_delete_string(std::string* str) { delete str; } |
|
|
|
google::protobuf::rust::PtrAndLen proto2_rust_cpp_string_to_view(std::string* str) { |
|
return google::protobuf::rust::PtrAndLen{str->data(), str->length()}; |
|
} |
|
}
|
|
|