inline void encode()

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