@@ -68,10 +68,31 @@ impl<'a> From<Value<'a>> for serde_json::Value {
6868 }
6969 Value :: BooleanLit ( b) => serde_json:: Value :: Bool ( b. value ) ,
7070 Value :: NullKeyword ( _) => serde_json:: Value :: Null ,
71- Value :: NumberLit ( num) => match serde_json:: Number :: from_str ( num. value ) {
72- Ok ( number) => serde_json:: Value :: Number ( number) ,
73- Err ( _) => serde_json:: Value :: String ( num. value . to_string ( ) ) ,
74- } ,
71+ Value :: NumberLit ( num) => {
72+ // Check if this is a hexadecimal literal (0x or 0X prefix)
73+ let num_str = num. value . trim_start_matches ( '-' ) ;
74+ if num_str. len ( ) > 2 && ( num_str. starts_with ( "0x" ) || num_str. starts_with ( "0X" ) ) {
75+ // Parse hexadecimal and convert to decimal
76+ let hex_part = & num_str[ 2 ..] ;
77+ match i64:: from_str_radix ( hex_part, 16 ) {
78+ Ok ( decimal_value) => {
79+ let final_value = if num. value . starts_with ( '-' ) {
80+ -decimal_value
81+ } else {
82+ decimal_value
83+ } ;
84+ serde_json:: Value :: Number ( serde_json:: Number :: from ( final_value) )
85+ }
86+ Err ( _) => serde_json:: Value :: String ( num. value . to_string ( ) ) ,
87+ }
88+ } else {
89+ // Standard decimal number
90+ match serde_json:: Number :: from_str ( num. value ) {
91+ Ok ( number) => serde_json:: Value :: Number ( number) ,
92+ Err ( _) => serde_json:: Value :: String ( num. value . to_string ( ) ) ,
93+ }
94+ }
95+ }
7596 Value :: Object ( obj) => {
7697 let mut map = serde_json:: map:: Map :: new ( ) ;
7798 for prop in obj. properties {
0 commit comments