in src/codecs/field_codecs.h [634:671]
inline void encode(PyObject *field_value, DxApi::DataWriter &writer) {
if (field_value == Py_None || field_value == NULL) {
if (!is_nullable_) {
THROW_EXCEPTION("Field '%s' is not nullable.", field_name_.c_str());
}
writer.writeBinaryArrayNull();
return;
}
if (PyBytes_Check(field_value)) {
uint8_t *bytes = (uint8_t *) PyBytes_AsString(field_value);
size_t size = PyBytes_Size(field_value);
if (bytes == NULL) {
if (!is_nullable_) {
THROW_EXCEPTION("Field '%s' is not nullable.", field_name_.c_str());
}
writer.writeBinaryArrayNull();
} else {
writer.writeBinaryArray(bytes, size);
}
}
else if (PyByteArray_Check(field_value)) {
uint8_t *bytes = (uint8_t *) PyByteArray_AsString(field_value);
if (bytes == NULL) {
if (!is_nullable_) {
THROW_EXCEPTION("Field '%s' is not nullable.", field_name_.c_str());
}
writer.writeBinaryArrayNull();
} else {
writer.writeBinaryArray(bytes, PyByteArray_Size(field_value));
}
}
else {
THROW_EXCEPTION("Wrong type of '%s' field. Required: BYTES.", field_name_.c_str());
}
}