private function writeEnum()

in src/Apache/Ignite/Internal/Binary/BinaryCommunicator.php [399:422]


    private function writeEnum(MessageBuffer $buffer, EnumItem $enumValue): void
    {
        $type = $this->typeStorage->getType($enumValue->getTypeId());
        if (!$type || !$type->isEnum()) {
            BinaryUtils::enumSerializationError(true, sprintf('enum type id "%d" is not registered', $enumValue->getTypeId()));
        }
        $buffer->writeInteger($enumValue->getTypeId());
        if ($enumValue->getOrdinal() !== null) {
            $buffer->writeInteger($enumValue->getOrdinal());
            return;
        } elseif ($enumValue->getName() !== null || $enumValue->getValue() !== null) {
            $enumValues = $type->getEnumValues();
            if ($enumValues) {
                for ($i = 0; $i < count($enumValues); $i++) {
                    if ($enumValue->getName() === $enumValues[$i][0] ||
                        $enumValue->getValue() === $enumValues[$i][1]) {
                        $buffer->writeInteger($i);
                        return;
                    }
                }
            }
        }
        ArgumentChecker::illegalArgument('Proper ordinal, name or value must be specified for EnumItem');
    }