@@ -8,7 +8,6 @@ use std::hash::Hash;
88use std:: rc:: Rc ;
99use std:: sync:: Arc ;
1010
11- use cairo_lang_utils:: Upcast ;
1211use cairo_lang_utils:: ordered_hash_map:: OrderedHashMap ;
1312use cairo_lang_utils:: ordered_hash_set:: OrderedHashSet ;
1413
@@ -33,6 +32,16 @@ pub trait DebugWithDb<'db> {
3332 fn fmt ( & self , f : & mut std:: fmt:: Formatter < ' _ > , db : & ' db Self :: Db ) -> std:: fmt:: Result ;
3433}
3534
35+ /// A trait that allows upcasting the database to the type T.
36+ pub trait DebugDbUpcast < ' db , T : ?Sized > {
37+ fn debug_db_upcast ( & ' db self ) -> & ' db T ;
38+ }
39+ impl < ' db , T : ?Sized > DebugDbUpcast < ' db , T > for T {
40+ fn debug_db_upcast ( & ' db self ) -> & ' db T {
41+ self
42+ }
43+ }
44+
3645pub struct DebugWith < ' me , ' db , Db : ?Sized > {
3746 value : BoxRef < ' me , dyn DebugWithDb < ' db , Db = Db > + ' me > ,
3847 db : & ' db Db ,
@@ -192,11 +201,14 @@ impl<'db, A, B> DebugWithDb<'db> for (A, B)
192201where
193202 A : DebugWithDb < ' db > ,
194203 B : DebugWithDb < ' db > + ' db ,
195- A :: Db : Upcast < ' db , B :: Db > ,
204+ A :: Db : DebugDbUpcast < ' db , B :: Db > ,
196205{
197206 type Db = A :: Db ;
198207 fn fmt ( & self , f : & mut std:: fmt:: Formatter < ' _ > , db : & ' db Self :: Db ) -> std:: fmt:: Result {
199- f. debug_tuple ( "" ) . field ( & self . 0 . debug ( db) ) . field ( & self . 1 . debug ( db. upcast ( ) ) ) . finish ( )
208+ f. debug_tuple ( "" )
209+ . field ( & self . 0 . debug ( db) )
210+ . field ( & self . 1 . debug ( db. debug_db_upcast ( ) ) )
211+ . finish ( )
200212 }
201213}
202214
@@ -205,15 +217,15 @@ where
205217 A : DebugWithDb < ' db > ,
206218 B : DebugWithDb < ' db > + ' db ,
207219 C : DebugWithDb < ' db > + ' db ,
208- A :: Db : Upcast < ' db , B :: Db > ,
209- A :: Db : Upcast < ' db , C :: Db > ,
220+ A :: Db : DebugDbUpcast < ' db , B :: Db > ,
221+ A :: Db : DebugDbUpcast < ' db , C :: Db > ,
210222{
211223 type Db = A :: Db ;
212224 fn fmt ( & self , f : & mut std:: fmt:: Formatter < ' _ > , db : & ' db Self :: Db ) -> std:: fmt:: Result {
213225 f. debug_tuple ( "" )
214226 . field ( & self . 0 . debug ( db) )
215- . field ( & self . 1 . debug ( db. upcast ( ) ) )
216- . field ( & self . 2 . debug ( db. upcast ( ) ) )
227+ . field ( & self . 1 . debug ( db. debug_db_upcast ( ) ) )
228+ . field ( & self . 2 . debug ( db. debug_db_upcast ( ) ) )
217229 . finish ( )
218230 }
219231}
@@ -278,9 +290,7 @@ pub mod helper {
278290 use std:: fmt;
279291 use std:: marker:: PhantomData ;
280292
281- use cairo_lang_utils:: Upcast ;
282-
283- use super :: { DebugWith , DebugWithDb } ;
293+ use super :: { DebugDbUpcast , DebugWith , DebugWithDb } ;
284294
285295 pub trait Fallback < ' db , T : fmt:: Debug , Db : ?Sized > {
286296 fn helper_debug ( a : & ' db T , _db : & ' db Db ) -> & ' db dyn fmt:: Debug {
@@ -290,10 +300,10 @@ pub mod helper {
290300
291301 pub struct HelperDebug < T , Db : ?Sized > ( PhantomData < T > , PhantomData < Db > ) ;
292302
293- impl < ' db , T : DebugWithDb < ' db > , Db : ?Sized + Upcast < ' db , T :: Db > > HelperDebug < T , Db > {
303+ impl < ' db , T : DebugWithDb < ' db > , Db : ?Sized + DebugDbUpcast < ' db , T :: Db > > HelperDebug < T , Db > {
294304 #[ allow( dead_code) ]
295305 pub fn helper_debug < ' me > ( a : & ' me T , db : & ' db Db ) -> DebugWith < ' me , ' db , T :: Db > {
296- a. debug ( db. upcast ( ) )
306+ a. debug ( db. debug_db_upcast ( ) )
297307 }
298308 }
299309
0 commit comments