inline void encode()

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);
            }
        }
    }