sysinfo 0.31.1

Library to get system information such as processes, CPUs, disks, components and networks
Documentation
// Take a look at the license at the top of the repository in the LICENSE file.

cfg_if! {
    if #[cfg(all(
        feature = "multithread",
        not(feature = "unknown-ci"),
        not(all(target_os = "macos", feature = "apple-sandbox")),
    ))] {
        /// Converts the value into a parallel iterator if the `multithread` feature is enabled.
        /// Uses the `rayon::iter::IntoParallelIterator` trait.
        #[cfg(all(
            feature = "multithread",
            not(feature = "unknown-ci"),
            not(all(target_os = "macos", feature = "apple-sandbox")),
        ))]
        #[allow(dead_code)]
        pub(crate) fn into_iter<T>(val: T) -> T::Iter
        where
            T: rayon::iter::IntoParallelIterator,
        {
            val.into_par_iter()
        }

        /// Converts the value into a parallel mutable iterator if the `multithread` feature is
        /// enabled. Uses the `rayon::iter::IntoParallelRefMutIterator` trait.
        #[cfg(feature = "component")]
        pub(crate) fn into_iter_mut<'a, T>(
            val: &'a mut T,
        ) -> <T as rayon::iter::IntoParallelRefMutIterator<'a>>::Iter
        where
            T: rayon::iter::IntoParallelRefMutIterator<'a> + ?Sized,
        {
            val.par_iter_mut()
        }
    } else {
        /// Converts the value into a sequential iterator if the `multithread` feature is disabled.
        /// Uses the `std::iter::IntoIterator` trait.
        #[allow(dead_code)]
        pub(crate) fn into_iter<T>(val: T) -> T::IntoIter
        where
            T: IntoIterator,
        {
            val.into_iter()
        }

        // In the multithreaded version of `into_iter_mut` above, the `&mut` on the argument is
        // indicating the parallel iterator is an exclusive reference. In the non-multithreaded
        // case, the `&mut` is already part of `T` and specifying it will result in the argument
        // being `&mut &mut T`.

        /// Converts the value into a sequential mutable iterator if the `multithread` feature is
        /// disabled. Uses the `std::iter::IntoIterator` trait.
        #[cfg(feature = "component")]
        pub(crate) fn into_iter_mut<T>(val: T) -> T::IntoIter
        where
            T: IntoIterator,
        {
            val.into_iter()
        }
    }
}