1
1
use codec:: { Decode , Encode } ;
2
2
use custom_derive:: pydecode;
3
3
use frame_metadata:: { RuntimeMetadata , RuntimeMetadataPrefixed } ;
4
+ use log;
4
5
5
6
use pyo3:: prelude:: * ;
6
7
@@ -599,6 +600,8 @@ mod bt_decode {
599
600
type_id : u32 ,
600
601
portable_registry : & PyPortableRegistry ,
601
602
) -> PyResult < Value < u32 > > {
603
+ log:: debug!( target: "btdecode" , "encoding a list-like type {:?}" , py_list) ;
604
+ log:: debug!( target: "btdecode" , "type_id: {:?}" , type_id) ;
602
605
match & ty. type_def {
603
606
scale_info:: TypeDef :: Array ( inner) => {
604
607
let ty_param = inner. type_param ;
@@ -607,6 +610,9 @@ mod bt_decode {
607
610
. registry
608
611
. resolve ( ty_param_id)
609
612
. expect ( & format ! ( "Failed to resolve type (1): {:?}" , ty_param) ) ;
613
+ log:: debug!( target: "btdecode" , "ty_param: {:?}" , ty_param) ;
614
+ log:: debug!( target: "btdecode" , "ty_param_id: {:?}" , ty_param_id) ;
615
+ log:: debug!( target: "btdecode" , "ty_: {:?}" , ty_) ;
610
616
611
617
let items = py_list
612
618
. iter ( )
@@ -723,6 +729,9 @@ mod bt_decode {
723
729
type_id : u32 ,
724
730
portable_registry : & PyPortableRegistry ,
725
731
) -> PyResult < Value < u32 > > {
732
+ log:: debug!( target: "btdecode" , "encoding a non-option type {:?} {:?}" , ty, to_encode) ;
733
+ log:: debug!( target: "btdecode" , "type_id: {:?}" , type_id) ;
734
+
726
735
if to_encode. is_none ( py) {
727
736
// If none and NOT option,
728
737
return Err ( PyErr :: new :: < pyo3:: exceptions:: PyValueError , _ > ( format ! (
@@ -732,6 +741,7 @@ mod bt_decode {
732
741
}
733
742
734
743
if py_isinstance ( py, to_encode, "bool" ) ? {
744
+ log:: debug!( target: "btdecode" , "encoding to bool" ) ;
735
745
let value = to_encode. extract :: < bool > ( py) ?;
736
746
737
747
match ty. type_def {
@@ -748,6 +758,7 @@ mod bt_decode {
748
758
}
749
759
}
750
760
} else if py_isinstance ( py, to_encode, "str" ) ? {
761
+ log:: debug!( target: "btdecode" , "encoding to str" ) ;
751
762
if to_encode. extract :: < char > ( py) . is_ok ( )
752
763
&& matches ! (
753
764
ty. type_def,
@@ -784,12 +795,14 @@ mod bt_decode {
784
795
} else if py_isinstance ( py, to_encode, "int" ) ?
785
796
&& matches ! ( & ty. type_def, scale_info:: TypeDef :: Primitive ( _) )
786
797
{
798
+ log:: debug!( target: "btdecode" , "encoding as primitive int" ) ;
787
799
let as_py_int = to_encode. downcast_bound :: < PyInt > ( py) ?. as_unbound ( ) ;
788
800
789
801
return int_type_def_to_value ( py, as_py_int, ty, type_id) ;
790
802
} else if py_isinstance ( py, to_encode, "int" ) ?
791
803
&& matches ! ( & ty. type_def, scale_info:: TypeDef :: Compact ( _) )
792
804
{
805
+ log:: debug!( target: "btdecode" , "encoding as compact int" ) ;
793
806
// Must be a Compact int
794
807
let as_py_int = to_encode. downcast_bound :: < PyInt > ( py) ?. as_unbound ( ) ;
795
808
@@ -812,6 +825,7 @@ mod bt_decode {
812
825
to_encode
813
826
) ) ) ;
814
827
} else if py_isinstance ( py, to_encode, "tuple" ) ? {
828
+ log:: debug!( target: "btdecode" , "encoding as tuple" ) ;
815
829
let tuple_value = to_encode. downcast_bound :: < PyTuple > ( py) ?;
816
830
let as_list = tuple_value. to_list ( ) ;
817
831
@@ -822,6 +836,7 @@ mod bt_decode {
822
836
) )
823
837
} )
824
838
} else if py_isinstance ( py, to_encode, "list" ) ? {
839
+ log:: debug!( target: "btdecode" , "encoding as list" ) ;
825
840
let as_list = to_encode. downcast_bound :: < PyList > ( py) ?;
826
841
827
842
pylist_to_value ( py, & as_list, ty, type_id, portable_registry) . map_err ( |_e| {
@@ -831,6 +846,7 @@ mod bt_decode {
831
846
) )
832
847
} )
833
848
} else if py_isinstance ( py, to_encode, "dict" ) ? {
849
+ log:: debug!( target: "btdecode" , "encoding as dict" ) ;
834
850
let py_dict = to_encode. downcast_bound :: < PyDict > ( py) ?;
835
851
836
852
match & ty. type_def {
@@ -894,6 +910,7 @@ mod bt_decode {
894
910
895
911
//} else if let Ok(value) = to_encode.downcast_bound::<PyBytes>(py) {
896
912
} else if py_has_dict_method ( py, to_encode) ? {
913
+ log:: debug!( target: "btdecode" , "encoding object as dict" ) ;
897
914
// Convert object to dict
898
915
let py_dict = py_to_dict ( py, to_encode) ?;
899
916
@@ -956,9 +973,10 @@ mod bt_decode {
956
973
}
957
974
} else {
958
975
return Err ( PyErr :: new :: < pyo3:: exceptions:: PyValueError , _ > ( format ! (
959
- "Invalid type for data: {} of type {}" ,
976
+ "Invalid type for data: {} of type {}, type_def: {:?} " ,
960
977
to_encode,
961
- to_encode. getattr( py, "__class__" ) . unwrap_or( py. None ( ) )
978
+ to_encode. getattr( py, "__class__" ) . unwrap_or( py. None ( ) ) ,
979
+ ty. type_def
962
980
) ) ) ;
963
981
}
964
982
}
@@ -1058,6 +1076,9 @@ mod bt_decode {
1058
1076
portable_registry : & PyPortableRegistry ,
1059
1077
to_encode : Py < PyAny > ,
1060
1078
) -> PyResult < Vec < u8 > > {
1079
+ // Initialize logging
1080
+ pyo3_log:: try_init ( ) ;
1081
+
1061
1082
// Create a memoization table for the type string to type id conversion
1062
1083
let mut memo = HashMap :: < String , u32 > :: new ( ) ;
1063
1084
0 commit comments