3#include <boost/python.hpp>
5namespace bp = boost::python;
10struct string_view_to_python {
11 static PyObject *convert(std::string_view sv)
noexcept {
12 return PyUnicode_FromStringAndSize(sv.data(),
13 static_cast<Py_ssize_t
>(sv.size()));
17struct string_view_from_python {
18 static void *convertible(PyObject *obj_ptr)
noexcept {
19 if (!PyUnicode_Check(obj_ptr) && !PyBytes_Check(obj_ptr)) {
25 static void construct(PyObject *obj_ptr,
26 bp::converter::rvalue_from_python_stage1_data *data) {
27 const char *value =
nullptr;
30 if (PyUnicode_Check(obj_ptr)) {
31 value = PyUnicode_AsUTF8AndSize(obj_ptr, &len);
33 bp::throw_error_already_set();
37 ((bp::converter::rvalue_from_python_storage<std::string_view> *)data)
39 new (storage) std::string_view(value,
static_cast<size_t>(len));
40 data->convertible = storage;
47 bp::to_python_converter<std::string_view, detail::string_view_to_python>();
49 bp::converter::registry::push_back(
50 &detail::string_view_from_python::convertible,
51 &detail::string_view_from_python::construct,
52 bp::type_id<std::string_view>());
void register_string_view_converter()