inline void encode()

in src/codecs/field_codecs.h [1009:1038]


    inline void encode(PyObject *field_value, DxApi::DataWriter &writer) {
        if (field_value == NULL) {
            if (!is_nullable_) {
                THROW_EXCEPTION("Field '%s' is not nullable.", field_name_.c_str());
            }

            writer.writeArrayNull();
            return;
        }

        if (PyList_Check(field_value)) {
            Py_ssize_t size = PyList_Size(field_value);

            writer.writeArrayStart(size);
            for (int i = 0; i < size; i++) {
                element_codec_->encode(PyList_GetItem(field_value, i), writer);
            }
            writer.writeArrayEnd();
        } else {
            if (field_value == Py_None) {
                if (!is_nullable_) {
                    THROW_EXCEPTION("Field '%s' is not nullable.", field_name_.c_str());
                }

                writer.writeArrayNull();
            } else {
                THROW_EXCEPTION("Wrong type of field '%s'. Required: ARRAY.", field_name_.c_str());
            }
        }
    }