@@ -138,20 +138,6 @@ def resolve_object_details(
138138 ) -> FlagResolutionDetails [Union [dict , list ]]:
139139 """Resolves the flag value for the provided flag key as a list or dictionary"""
140140 return self .__resolve_value (FlagType (FlagType .OBJECT ), flag_key , default_value , evaluation_context )
141-
142- def serialize_value (self , flag_type : FlagType , value : Any ):
143- """Serializes the raw flag value to the expected type based on flag_type."""
144- if flag_type == FlagType .BOOLEAN and isinstance (value , bool ):
145- return value
146- elif flag_type == FlagType .STRING and isinstance (value , str ):
147- return value
148- elif flag_type == FlagType .INTEGER and isinstance (value , (int , float )) and not isinstance (value , bool ):
149- return int (value )
150- elif flag_type == FlagType .FLOAT and isinstance (value , (int , float )) and not isinstance (value , bool ):
151- return float (value )
152- elif flag_type == FlagType .OBJECT and isinstance (value , (dict , list )):
153- return value
154- return None
155141
156142 def __resolve_value (self , flag_type : FlagType , flag_key : str , default_value : Any ,
157143 evaluation_context : Optional [EvaluationContext ] = None ) -> FlagResolutionDetails :
@@ -165,7 +151,7 @@ def __resolve_value(self, flag_type: FlagType, flag_key: str, default_value: Any
165151 ld_context = self .__context_converter .to_ld_context (evaluation_context )
166152 result = self .__client .variation_detail (flag_key , ld_context , default_value )
167153
168- resolved_value = self .serialize_value (flag_type , result .value )
154+ resolved_value = self .__validate_and_cast_value (flag_type , result .value )
169155 if resolved_value is None :
170156 return self .__mismatched_type_details (default_value )
171157
@@ -176,6 +162,20 @@ def __resolve_value(self, flag_type: FlagType, flag_key: str, default_value: Any
176162 )
177163
178164 return self .__details_converter .to_resolution_details (resolved_detail )
165+
166+ def __validate_and_cast_value (self , flag_type : FlagType , value : Any ):
167+ """Serializes the raw flag value to the expected type based on flag_type."""
168+ if flag_type == FlagType .BOOLEAN and isinstance (value , bool ):
169+ return value
170+ elif flag_type == FlagType .STRING and isinstance (value , str ):
171+ return value
172+ elif flag_type == FlagType .INTEGER and isinstance (value , (int , float )) and not isinstance (value , bool ):
173+ return int (value ) # Float decimals are truncated to int
174+ elif flag_type == FlagType .FLOAT and isinstance (value , (int , float )) and not isinstance (value , bool ):
175+ return float (value )
176+ elif flag_type == FlagType .OBJECT and isinstance (value , (dict , list )):
177+ return value
178+ return None
179179
180180 @staticmethod
181181 def __mismatched_type_details (default_value : Any ) -> FlagResolutionDetails :
0 commit comments