protected function validateSame($value, string $parameter, array $args = [], array $rules = null, array $context = null): ?string
    {
        if (count($args) == 0) {
            throw new ValidatorConfigException("Validator 'same' must have argument in validator list for parameter {$parameter}");
        }

        $sameAsField = trim($args[0]);

        if (strlen($sameAsField) == 0) {
            throw new ValidatorConfigException("Validator 'same' must have non-empty argument; parameter={$parameter}");
        }

        $present = $this->validatePresent($value, $sameAsField, [], $rules, $context);
        if ($present !== null) {
            return $present;
        }

        //$value = $this->getValue($parameter);

        if ($value === null) {
            return null;
        }

        if (!is_scalar($value)) {
            return Message::getMessage(Message::PRIMITIVE, [
                'param' => $parameter
            ]);
        }

        $sameAsValue = $context[$sameAsField] ?? null;

        if (!is_scalar($sameAsValue)) {
            return Message::getMessage(Message::PRIMITIVE, [
                'param' => $sameAsField
            ]);
        }

        if ($value != $sameAsValue) {
            return Message::getMessage(Message::SAME, [
                'param' => $parameter,
                'value' => $value,
                'otherField' => $sameAsField,
                'otherValue' => $sameAsValue
            ]);
        }

        return null;
    }