From a8a9336309fb25654a3e06f24d833fd9d43eac57 Mon Sep 17 00:00:00 2001 From: Ryan Lopopolo Date: Sun, 3 Oct 2021 07:22:00 -0700 Subject: [PATCH] Add `impl From for i32` This commit adds a first-class `From` conversion of `Ordering` into `i32`. `Ordering` is defined to be compatible with the return types of the various `...cmp...` routines in the C standard library, but the only way to convert an `Ordering` to an `i32` is with a non-obvious `as` cast. This commit adds a proper API for doing this and hides a "scary" `as` cast inside the `core` library. --- library/core/src/cmp.rs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/library/core/src/cmp.rs b/library/core/src/cmp.rs index 5ac9fdec0cf58..b70aef7bf26ff 100644 --- a/library/core/src/cmp.rs +++ b/library/core/src/cmp.rs @@ -568,6 +568,18 @@ impl Ordering { } } +#[stable(feature = "convert_ordering_into_i32", since = "1.57.0")] +impl From for i32 { + /// Convert an [`Ordering`] into a signed 32-bit integer. + /// + /// This function converts an `Ordering` into an integer compatible with C + /// FFI. This `i32` value is compatible with the return value of C library + /// functions such as `strncmp`. + fn from(ordering: Ordering) -> Self { + ordering as i32 + } +} + /// A helper struct for reverse ordering. /// /// This struct is a helper to be used with functions like [`Vec::sort_by_key`] and