| 74 | } |
| 75 | |
| 76 | fn deserialize_any_int<'de, V>(&self, int: &Bound<'_, PyInt>, visitor: V) -> Result<V::Value> |
| 77 | where |
| 78 | V: de::Visitor<'de>, |
| 79 | { |
| 80 | if let Ok(x) = int.extract::<u128>() { |
| 81 | if let Ok(x) = u8::try_from(x) { |
| 82 | visitor.visit_u8(x) |
| 83 | } else if let Ok(x) = u16::try_from(x) { |
| 84 | visitor.visit_u16(x) |
| 85 | } else if let Ok(x) = u32::try_from(x) { |
| 86 | visitor.visit_u32(x) |
| 87 | } else if let Ok(x) = u64::try_from(x) { |
| 88 | visitor.visit_u64(x) |
| 89 | } else { |
| 90 | visitor.visit_u128(x) |
| 91 | } |
| 92 | } else if let Ok(x) = int.extract::<i128>() { |
| 93 | if let Ok(x) = i8::try_from(x) { |
| 94 | visitor.visit_i8(x) |
| 95 | } else if let Ok(x) = i16::try_from(x) { |
| 96 | visitor.visit_i16(x) |
| 97 | } else if let Ok(x) = i32::try_from(x) { |
| 98 | visitor.visit_i32(x) |
| 99 | } else if let Ok(x) = i64::try_from(x) { |
| 100 | visitor.visit_i64(x) |
| 101 | } else { |
| 102 | visitor.visit_i128(x) |
| 103 | } |
| 104 | } else { |
| 105 | #[cfg(feature = "arbitrary_precision")] |
| 106 | { |
| 107 | visitor.visit_map(NumberDeserializer { |
| 108 | number: Some(int.to_string()), |
| 109 | }) |
| 110 | } |
| 111 | #[cfg(not(feature = "arbitrary_precision"))] |
| 112 | { |
| 113 | // Re-attempt to return the original error. |
| 114 | let _: i128 = int.extract()?; |
| 115 | unreachable!() |
| 116 | } |
| 117 | } |
| 118 | } |
| 119 | } |
| 120 | |
| 121 | macro_rules! deserialize_type { |