from solverforge_legacy.solver.score import HardSoftScore from typing import Any from pydantic import ( BaseModel, ConfigDict, PlainSerializer, BeforeValidator, ValidationInfo, ) from pydantic.alias_generators import to_camel class JsonDomainBase(BaseModel): model_config = ConfigDict( alias_generator=to_camel, populate_by_name=True, from_attributes=True, ) ScoreSerializer = PlainSerializer(lambda score: str(score), return_type=str) IdSerializer = PlainSerializer( lambda item: item.id if item is not None else None, return_type=str | None ) def validate_score(v: Any, info: ValidationInfo) -> Any: if isinstance(v, HardSoftScore) or v is None: return v if isinstance(v, str): return HardSoftScore.parse(v) raise ValueError('"score" should be a string') ScoreValidator = BeforeValidator(validate_score)