blob: 9ee5d34a3ba7cfbd6217532cdc28d423da1a4130 [file] [log] [blame] [edit]
// Part of the Crubit project, under the Apache License v2.0 with LLVM
// Exceptions. See /LICENSE for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
#ifndef THIRD_PARTY_CRUBIT_RS_BINDINGS_FROM_CC_TEST_BRIDGE_BIRDGE_LIB_H_
#define THIRD_PARTY_CRUBIT_RS_BINDINGS_FROM_CC_TEST_BRIDGE_BIRDGE_LIB_H_
#include <cstddef>
#include <string>
#include <utility>
struct [[clang::annotate("crubit_bridge_type", "MyRustStruct"),
clang::annotate("crubit_bridge_type_rust_to_cpp_converter",
"rust_to_cpp_converter"),
clang::annotate("crubit_bridge_type_cpp_to_rust_converter",
"cpp_to_rust_converter")]] CppStruct {
std::string s;
explicit CppStruct(std::string s) : s(std::move(s)) {}
};
inline size_t CalStructSize(CppStruct x) { return x.s.size(); }
inline CppStruct ReturnHelloWorldStruct() { return CppStruct{"hello world"}; }
inline CppStruct PadADot(CppStruct x) {
x.s += ".";
return x;
}
inline CppStruct Concat(CppStruct x, CppStruct y) {
x.s += y.s;
return x;
}
inline void ffi_create_my_cpp_struct(const char* s, size_t len, void* output) {
new (output) CppStruct(std::string(s, len));
}
inline const char* ffi_get_buffer(const void* input) {
return reinterpret_cast<const CppStruct*>(input)->s.c_str();
}
inline size_t ffi_get_buffer_len(const void* input) {
return reinterpret_cast<const CppStruct*>(input)->s.size();
}
#endif // THIRD_PARTY_CRUBIT_RS_BINDINGS_FROM_CC_TEST_BRIDGE_BIRDGE_LIB_H_