from typing importAny, List, TypeVar, Callable, Type, cast T = TypeVar("T") deffrom_int(x: Any) -> int: assertisinstance(x, int) andnotisinstance(x, bool) return x deffrom_str(x: Any) -> str: assertisinstance(x, str) return x deffrom_list(f: Callable[[Any], T], x: Any) -> List[T]: assertisinstance(x, list) return [f(y) for y in x] defto_class(c: Type[T], x: Any) -> dict: assertisinstance(x, c) return cast(Any, x).to_dict() classNested: a: int b: intdef__init__(self, a: int, b: int) -> None: self.a = a self.b = b @staticmethoddeffrom_dict(obj: Any) -> 'Nested': assertisinstance(obj, dict) a = from_int(obj.get("a")) b = int(from_str(obj.get("b"))) return Nested(a, b) defto_dict(self) -> dict: result: dict = {} result["a"] = from_int(self.a) result["b"] = from_str(str(self.b)) return result classGeneratedClass: a: str arr: List[int] nested: Nested def__init__(self, a: str, arr: List[int], nested: Nested) -> None: self.a = a self.arr = arr self.nested = nested @staticmethoddeffrom_dict(obj: Any) -> 'GeneratedClass': assertisinstance(obj, dict) a = from_str(obj.get("a")) arr = from_list(from_int, obj.get("arr")) nested = Nested.from_dict(obj.get("nested")) return GeneratedClass(a, arr, nested) defto_dict(self) -> dict: result: dict = {} result["a"] = from_str(self.a) result["arr"] = from_list(from_int, self.arr) result["nested"] = to_class(Nested, self.nested) return result defgenerated_class_from_dict(s: Any) -> GeneratedClass: return GeneratedClass.from_dict(s) defgenerated_class_to_dict(x: GeneratedClass) -> Any: return to_class(GeneratedClass, x)