@@ -5,6 +5,8 @@ use crate::value::{to_value, Value};
55use alloc:: borrow:: ToOwned ;
66use alloc:: string:: { String , ToString } ;
77use alloc:: vec:: Vec ;
8+ #[ cfg( not( feature = "arbitrary_precision" ) ) ]
9+ use core:: convert:: TryFrom ;
810use core:: fmt:: Display ;
911use core:: result;
1012use serde:: ser:: { Impossible , Serialize } ;
@@ -92,9 +94,22 @@ impl serde::Serializer for Serializer {
9294 Ok ( Value :: Number ( value. into ( ) ) )
9395 }
9496
95- #[ cfg( feature = "arbitrary_precision" ) ]
9697 fn serialize_i128 ( self , value : i128 ) -> Result < Value > {
97- Ok ( Value :: Number ( value. into ( ) ) )
98+ #[ cfg( feature = "arbitrary_precision" ) ]
99+ {
100+ Ok ( Value :: Number ( value. into ( ) ) )
101+ }
102+
103+ #[ cfg( not( feature = "arbitrary_precision" ) ) ]
104+ {
105+ if let Ok ( value) = u64:: try_from ( value) {
106+ Ok ( Value :: Number ( value. into ( ) ) )
107+ } else if let Ok ( value) = i64:: try_from ( value) {
108+ Ok ( Value :: Number ( value. into ( ) ) )
109+ } else {
110+ Err ( Error :: syntax ( ErrorCode :: NumberOutOfRange , 0 , 0 ) )
111+ }
112+ }
98113 }
99114
100115 #[ inline]
@@ -117,9 +132,20 @@ impl serde::Serializer for Serializer {
117132 Ok ( Value :: Number ( value. into ( ) ) )
118133 }
119134
120- #[ cfg( feature = "arbitrary_precision" ) ]
121135 fn serialize_u128 ( self , value : u128 ) -> Result < Value > {
122- Ok ( Value :: Number ( value. into ( ) ) )
136+ #[ cfg( feature = "arbitrary_precision" ) ]
137+ {
138+ Ok ( Value :: Number ( value. into ( ) ) )
139+ }
140+
141+ #[ cfg( not( feature = "arbitrary_precision" ) ) ]
142+ {
143+ if let Ok ( value) = u64:: try_from ( value) {
144+ Ok ( Value :: Number ( value. into ( ) ) )
145+ } else {
146+ Err ( Error :: syntax ( ErrorCode :: NumberOutOfRange , 0 , 0 ) )
147+ }
148+ }
123149 }
124150
125151 #[ inline]
0 commit comments