class _JsonSchemaRuntimeValidationBaseCore(BaseModel):
    custom_helper = True


class _JsonSchemaRuntimeValidationBase(_JsonSchemaRuntimeValidationBaseCore):
    __json_schema_property_count_rule__: ClassVar[tuple[Any, ...]] = ()

    @model_validator(mode='before')
    @classmethod
    def _validate_json_schema_property_count(cls, data: Any) -> Any:
        if not (rule := cls.__json_schema_property_count_rule__):
            return data
        if not isinstance(data, dict):
            return data
        property_count = len(data)
        min_properties, max_properties = rule
        if min_properties is not None and property_count < min_properties:
            raise ValueError(f'Expected at least {min_properties} properties')
        if max_properties is not None and property_count > max_properties:
            raise ValueError(f'Expected at most {max_properties} properties')
        return data
