in src/codecs/field_codecs.h [778:810]
inline void encode(PyObject *field_value, DxApi::DataWriter &writer) {
if (Py_None == field_value || field_value == NULL) {
if (!is_nullable_) {
THROW_EXCEPTION("Field '%s' is not nullable.", field_name_.c_str());
}
writer.writeUTF8((const std::string *) NULL);
} else {
if (PyUnicode_Check(field_value)) {
std::wstring str;
str.resize(PyUnicode_GetSize(field_value) + 1, 0);
int len = (int)PyUnicode_AsWideChar(
#if PY_VERSION_HEX < 0x03020000
(PyUnicodeObject *)
#endif
field_value, &str[0], (Py_ssize_t)str.size());
if (len > -1) {
assert(len < (int)str.size());
} else {
len = str.size() - 1;
}
str[len] = 0;
writer.writeUTF8(str.c_str(), len);
} else {
if (!is_nullable_) {
THROW_EXCEPTION("Field '%s' is not nullable.", field_name_.c_str());
}
writer.writeUTF8((const std::string *) NULL);
}
}
}