11import ctypes
2+ import json
23import os
34import platform
4- import json
5- from typing import List , Optional , Tuple , Literal
5+ from typing import List , Literal , Optional , Tuple
6+
7+ TypeTreeBackend = Literal ["AssetStudio" , "AssetsTools" , "AssetRipper" ]
68
79
810class TypeTreeNodeNative (ctypes .Structure ):
@@ -105,28 +107,24 @@ class TypeTreeGenerator:
105107 def __init__ (
106108 self ,
107109 unity_version : str ,
108- generator : Literal [ "AssetStudio" , "AssetsTools" , "AssetRipper" ] = "AssetStudio" ,
110+ generator : TypeTreeBackend = "AssetStudio" ,
109111 asm_path : Optional [str ] = None ,
110112 ):
111113 init_dll (asm_path )
112- self .ptr = DLL .TypeTreeGenerator_init (
113- unity_version .encode ("ascii" ), generator .encode ("ascii" )
114- )
114+ self .ptr = DLL .TypeTreeGenerator_init (unity_version .encode ("ascii" ), generator .encode ("ascii" ))
115115 if not self .ptr :
116116 raise RuntimeError ("Failed to initialize TypeTreeGenerator" )
117117
118118 def __del__ (self ):
119119 DLL .TypeTreeGenerator_del (self .ptr )
120120
121121 def load_dll (self , dll : bytes ):
122- assert not DLL .TypeTreeGenerator_loadDLL (self .ptr , dll , len (dll )), (
123- "failed to load dll"
124- )
122+ assert not DLL .TypeTreeGenerator_loadDLL (self .ptr , dll , len (dll )), "failed to load dll"
125123
126124 def load_il2cpp (self , il2cpp : bytes , metadata : bytes ):
127- assert not DLL .TypeTreeGenerator_loadIL2CPP (
128- self . ptr , il2cpp , len ( il2cpp ), metadata , len ( metadata )
129- ), "failed to load il2cpp"
125+ assert not DLL .TypeTreeGenerator_loadIL2CPP (self . ptr , il2cpp , len ( il2cpp ), metadata , len ( metadata )), (
126+ "failed to load il2cpp"
127+ )
130128
131129 def get_nodes_as_json (self , assembly : str , fullname : str ) -> str :
132130 jsonPtr = ctypes .c_char_p ()
@@ -151,9 +149,7 @@ def get_nodes(self, assembly: str, fullname: str) -> List[TypeTreeNode]:
151149 ctypes .byref (nodes_ptr ),
152150 ctypes .byref (nodes_count ),
153151 ), "failed to dump nodes raw"
154- nodes_array = ctypes .cast (
155- nodes_ptr , ctypes .POINTER (TypeTreeNodeNative * nodes_count .value )
156- ).contents
152+ nodes_array = ctypes .cast (nodes_ptr , ctypes .POINTER (TypeTreeNodeNative * nodes_count .value )).contents
157153 nodes = [
158154 TypeTreeNode (
159155 m_Type = node .m_Type .decode ("ascii" ),
@@ -174,9 +170,7 @@ def get_monobehavior_definitions(self) -> List[Tuple[str, str]]:
174170 ctypes .byref (names_ptr ),
175171 ctypes .byref (names_cnt ),
176172 ), "failed to get module exports"
177- ptr_array = ctypes .cast (
178- names_ptr , ctypes .POINTER (ctypes .c_char_p * names_cnt .value )
179- )
173+ ptr_array = ctypes .cast (names_ptr , ctypes .POINTER (ctypes .c_char_p * names_cnt .value ))
180174 names = [name .decode ("utf-8" ) for name in ptr_array .contents ]
181175 DLL .TypeTreeGenerator_freeMonoBehaviorDefinitions (names_ptr , names_cnt )
182176 return [(module , fullname ) for module , fullname in zip (names [::2 ], names [1 ::2 ])]
@@ -194,4 +188,4 @@ def get_loaded_dll_names(self) -> List[str]:
194188 return names
195189
196190
197- __all__ = ( "TypeTreeGenerator" , "TypeTreeNode" , "TypeTreeNodeNative" )
191+ __all__ = [ "TypeTreeGenerator" , "TypeTreeNode" , "TypeTreeNodeNative" , "TypeTreeBackend" ]
0 commit comments