in src/codecs/field_codecs.h [932:981]
inline void encode(PyObject *field_value, DxApi::DataWriter &writer) {
bool type_mismatch;
bool exists = getStringValue(field_value, buffer_, type_mismatch);
if (type_mismatch)
THROW_EXCEPTION("Wrong type of field '%s'. Required: STRING.", field_name_.c_str());
if (exists) {
auto it = descriptor_.symbolToEnumValue.find(buffer_);
if (it == descriptor_.symbolToEnumValue.end())
THROW_EXCEPTION("Unknown enum value '%s' of field '%s'", buffer_.c_str(), field_name_.c_str());
switch (descriptor_.enumType) {
case Schema::FieldTypeEnum::ENUM8:
writer.writeEnum8(descriptor_.symbolToEnumValue[buffer_]);
break;
case Schema::FieldTypeEnum::ENUM16:
writer.writeEnum16(descriptor_.symbolToEnumValue[buffer_]);
break;
case Schema::FieldTypeEnum::ENUM32:
writer.writeEnum32(descriptor_.symbolToEnumValue[buffer_]);
break;
case Schema::FieldTypeEnum::ENUM64:
writer.writeEnum64(descriptor_.symbolToEnumValue[buffer_]);
break;
default:
THROW_EXCEPTION("Unknow type of enum for '%s' field.", field_name_.c_str());
}
} else {
if (!is_nullable_) {
THROW_EXCEPTION("Field '%s' is not nullable.", field_name_.c_str());
}
switch (descriptor_.enumType) {
case Schema::FieldTypeEnum::ENUM8:
writer.writeEnum8(DxApi::Constants::ENUM_NULL);
break;
case Schema::FieldTypeEnum::ENUM16:
writer.writeEnum16(DxApi::Constants::ENUM_NULL);
break;
case Schema::FieldTypeEnum::ENUM32:
writer.writeEnum32(DxApi::Constants::ENUM_NULL);
break;
case Schema::FieldTypeEnum::ENUM64:
writer.writeEnum64(DxApi::Constants::ENUM_NULL);
break;
default:
THROW_EXCEPTION("Unknow type of enum for '%s' field.", field_name_.c_str());
}
}
}