from imgui_bundle import ImVec4, ImVec2, ImColor from typing_extensions import Annotated from pydantic_core import core_schema from pydantic import ( GetCoreSchemaHandler, GetJsonSchemaHandler, ) from pydantic.json_schema import JsonSchemaValue from typing import Any class _ImVec4PydanticAnnotation: @classmethod def __get_pydantic_core_schema__( cls, _source_type: Any, _handler: GetCoreSchemaHandler, ) -> core_schema.CoreSchema: def validate_from_tuple(value: tuple[float, float, float, float]) -> ImVec4: result = ImVec4() result.x = value[0] result.y = value[1] result.z = value[2] result.w = value[3] return result from_tuple_schema = core_schema.chain_schema( [ core_schema.tuple_schema([core_schema.float_schema(), core_schema.float_schema(), core_schema.float_schema(), core_schema.float_schema()]), core_schema.no_info_plain_validator_function(validate_from_tuple), ] ) return core_schema.json_or_python_schema( json_schema=from_tuple_schema, python_schema=core_schema.union_schema( [ core_schema.is_instance_schema(ImVec4), from_tuple_schema, ] ), serialization=core_schema.plain_serializer_function_ser_schema( lambda instance: [instance.x, instance.y, instance.z, instance.w] ), ) @classmethod def __get_pydantic_json_schema__( cls, _core_schema: core_schema.CoreSchema, handler: GetJsonSchemaHandler ) -> JsonSchemaValue: return handler(core_schema.tuple_schema([core_schema.float_schema(), core_schema.float_schema(), core_schema.float_schema(), core_schema.float_schema()])) # ImVec4_Pydantic is a synonym for ImVec4, which is compatible with Pydantic ImVec4_Pydantic = Annotated[ ImVec4, _ImVec4PydanticAnnotation ] class _ImVec2PydanticAnnotation: @classmethod def __get_pydantic_core_schema__( cls, _source_type: Any, _handler: GetCoreSchemaHandler, ) -> core_schema.CoreSchema: def validate_from_tuple(value: tuple[float, float]) -> ImVec2: result = ImVec2() result.x = value[0] result.y = value[1] return result from_tuple_schema = core_schema.chain_schema( [ core_schema.tuple_schema([core_schema.float_schema(), core_schema.float_schema()]), core_schema.no_info_plain_validator_function(validate_from_tuple), ] ) return core_schema.json_or_python_schema( json_schema=from_tuple_schema, python_schema=core_schema.union_schema( [ core_schema.is_instance_schema(ImVec2), from_tuple_schema, ] ), serialization=core_schema.plain_serializer_function_ser_schema( lambda instance: [instance.x, instance.y] ), ) @classmethod def __get_pydantic_json_schema__( cls, _core_schema: core_schema.CoreSchema, handler: GetJsonSchemaHandler ) -> JsonSchemaValue: return handler(core_schema.tuple_schema([core_schema.float_schema(), core_schema.float_schema()])) # ImVec2_Pydantic is a synonym for ImVec2, which is compatible with Pydantic ImVec2_Pydantic = Annotated[ ImVec2, _ImVec2PydanticAnnotation ] class _ImColorPydanticAnnotation: @classmethod def __get_pydantic_core_schema__( cls, _source_type: Any, _handler: GetCoreSchemaHandler, ) -> core_schema.CoreSchema: def validate_from_tuple(value: tuple[float, float, float, float]) -> ImColor: result = ImColor() result.value.x = value[0] result.value.y = value[1] result.value.z = value[2] result.value.w = value[3] return result from_tuple_schema = core_schema.chain_schema( [ core_schema.tuple_schema([core_schema.float_schema(), core_schema.float_schema(), core_schema.float_schema(), core_schema.float_schema()]), core_schema.no_info_plain_validator_function(validate_from_tuple), ] ) return core_schema.json_or_python_schema( json_schema=from_tuple_schema, python_schema=core_schema.union_schema( [ core_schema.is_instance_schema(ImVec4), from_tuple_schema, ] ), serialization=core_schema.plain_serializer_function_ser_schema( lambda instance: [instance.value.x, instance.value.y, instance.value.z, instance.value.w] ), ) @classmethod def __get_pydantic_json_schema__( cls, _core_schema: core_schema.CoreSchema, handler: GetJsonSchemaHandler ) -> JsonSchemaValue: return handler(core_schema.tuple_schema([core_schema.float_schema(), core_schema.float_schema(), core_schema.float_schema(), core_schema.float_schema()])) # ImColor_Pydantic is a synonym for ImColor, which is compatible with Pydantic ImColor_Pydantic = Annotated[ ImColor, _ImColorPydanticAnnotation ]