21 template<>
struct type_caster<Object::Value> : type_caster_base<Object::Value> {
23 type_caster() =
default;
24 type_caster(type_caster&&) noexcept =
default;
25 type_caster& operator=(type_caster&&) noexcept =
default;
31 PYBIND11_TYPE_CASTER(Object::Value, const_name(
"_deepstream.Value"));
33 bool load(handle src,
bool) {
35 PyTypeObject *srctype = Py_TYPE(src.ptr());
36 if (strcmp(srctype->tp_name,
"str") == 0) {
37 auto tmp = reinterpret_borrow<py::str>(src).cast<
string>();
38 value = Object::Value(tmp);
39 }
else if (strcmp(srctype->tp_name,
"int") == 0) {
40 auto tmp = reinterpret_borrow<py::int_>(src).cast<
int>();
41 value = Object::Value(tmp);
42 }
else if (strcmp(srctype->tp_name,
"bool") == 0) {
43 auto tmp = reinterpret_borrow<py::bool_>(src).cast<
bool>();
44 value = Object::Value(tmp);
45 }
else if (strcmp(srctype->tp_name,
"float") == 0) {
46 auto tmp = reinterpret_borrow<py::float_>(src).cast<
float>();
47 value = Object::Value(tmp);
49 printf(
"Type not supported for value: %s\n", srctype->tp_name);
57 static py::handle
cast(
const Object::Value& src, py::return_value_policy , py::handle ) {
58 if (src.isInteger()) {
59 auto value = (int)src;
60 return PyLong_FromLong((
long)value);
61 }
else if (src.isUnsignedInteger()) {
62 auto value = (
unsigned int)src;
63 return PyLong_FromLong((
long)value);
64 }
else if (src.isString()) {
65 auto value = (string)src;
66 return PyUnicode_FromString(value.c_str());
67 }
else if (src.isFloat()) {
68 auto value = (float)src;
69 return PyFloat_FromDouble((
double)value);
70 }
else if (src.isDouble()) {
71 auto value = (double)src;
72 return PyFloat_FromDouble(value);
73 }
else if (src.isBoolean()) {
74 auto value = (bool)src;
75 PyObject*
object = value ? Py_True:Py_False;
78 printf(
"Type from Object::Value is not supported\n");