summaryrefslogtreecommitdiffstats
path: root/third_party/rust/serde/src/integer128.rs
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/rust/serde/src/integer128.rs')
-rw-r--r--third_party/rust/serde/src/integer128.rs82
1 files changed, 82 insertions, 0 deletions
diff --git a/third_party/rust/serde/src/integer128.rs b/third_party/rust/serde/src/integer128.rs
new file mode 100644
index 0000000000..904c2a233f
--- /dev/null
+++ b/third_party/rust/serde/src/integer128.rs
@@ -0,0 +1,82 @@
+/// Conditional compilation depending on whether Serde is built with support for
+/// 128-bit integers.
+///
+/// Data formats that wish to support Rust compiler versions older than 1.26
+/// (or targets that lack 128-bit integers) may place the i128 / u128 methods
+/// of their Serializer and Deserializer behind this macro.
+///
+/// Data formats that require a minimum Rust compiler version of at least 1.26,
+/// or do not target platforms that lack 128-bit integers, do not need to
+/// bother with this macro and may assume support for 128-bit integers.
+///
+/// ```edition2018
+/// # use serde::__private::doc::Error;
+/// #
+/// # struct MySerializer;
+/// #
+/// use serde::{serde_if_integer128, Serializer};
+///
+/// impl Serializer for MySerializer {
+/// type Ok = ();
+/// type Error = Error;
+///
+/// fn serialize_i64(self, v: i64) -> Result<Self::Ok, Self::Error> {
+/// /* ... */
+/// # unimplemented!()
+/// }
+///
+/// /* ... */
+///
+/// serde_if_integer128! {
+/// fn serialize_i128(self, v: i128) -> Result<Self::Ok, Self::Error> {
+/// /* ... */
+/// # unimplemented!()
+/// }
+///
+/// fn serialize_u128(self, v: u128) -> Result<Self::Ok, Self::Error> {
+/// /* ... */
+/// # unimplemented!()
+/// }
+/// }
+/// #
+/// # serde::__serialize_unimplemented! {
+/// # bool i8 i16 i32 u8 u16 u32 u64 f32 f64 char str bytes none some
+/// # unit unit_struct unit_variant newtype_struct newtype_variant seq
+/// # tuple tuple_struct tuple_variant map struct struct_variant
+/// # }
+/// }
+/// ```
+///
+/// When Serde is built with support for 128-bit integers, this macro expands
+/// transparently into just the input tokens.
+///
+/// ```edition2018
+/// macro_rules! serde_if_integer128 {
+/// ($($tt:tt)*) => {
+/// $($tt)*
+/// };
+/// }
+/// ```
+///
+/// When built without support for 128-bit integers, this macro expands to
+/// nothing.
+///
+/// ```edition2018
+/// macro_rules! serde_if_integer128 {
+/// ($($tt:tt)*) => {};
+/// }
+/// ```
+#[cfg(not(no_integer128))]
+#[macro_export]
+macro_rules! serde_if_integer128 {
+ ($($tt:tt)*) => {
+ $($tt)*
+ };
+}
+
+#[cfg(no_integer128)]
+#[macro_export]
+#[doc(hidden)]
+macro_rules! serde_if_integer128 {
+ ($($tt:tt)*) => {};
+}