"""Custom JSON encoders.""" import datetime import decimal import json class DatetimeEncoder(json.JSONEncoder): """Custom datetime JSON encoder.""" def default(self, obj: datetime.datetime) -> str: """Convert datetime to string. Args: obj (object): Object for JSON serialization. Returns: string: Serialized object. """ if isinstance(obj, datetime.datetime): return obj.isoformat() return json.JSONEncoder.default(self, obj) class DatetimeDecimalEncoder(json.JSONEncoder): """Custom datetime and decimal JSON encoder.""" def default(self, obj: datetime.datetime | decimal.Decimal) -> str | float: """Convert datetime and decimal to string/float. Args: obj (object): Object for JSON serialization. Returns: string or float: Serialized object. """ if isinstance(obj, datetime.datetime): return obj.isoformat() if isinstance(obj, decimal.Decimal): return float(obj) return super().default(obj)