in src/codecs/field_codecs.h [730:762]
inline void encode(PyObject *field_value, DxApi::DataWriter &writer) {
if (field_value == NULL || Py_None == field_value) {
writer.writeWChar(DxApi::Constants::CHAR_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());
str[len] = 0;
}
else str[str.size() - 1] = 0;
if (!is_nullable_ && str[0] == DxApi::Constants::CHAR_NULL) {
THROW_EXCEPTION("Field '%s' is not nullable. Value '%d' is invalid.", field_name_.c_str(), str[0]);
}
writer.writeWChar(str[0]);
} else {
if (!is_nullable_) {
THROW_EXCEPTION("Field '%s' is not nullable.", field_name_.c_str());
}
writer.writeWChar(DxApi::Constants::CHAR_NULL);
}
}
}