From 978544c7771d3bd75d0ee1b9758cc175b65e7112 Mon Sep 17 00:00:00 2001 From: flippette Date: Mon, 1 Apr 2024 23:46:06 +0700 Subject: [PATCH] Add freestanding `default()` --- src/default.rs | 31 +++++++++++++++++++++++++++++++ src/lib.rs | 2 ++ 2 files changed, 33 insertions(+) create mode 100644 src/default.rs diff --git a/src/default.rs b/src/default.rs new file mode 100644 index 0000000..907cb66 --- /dev/null +++ b/src/default.rs @@ -0,0 +1,31 @@ +//! Freestanding version of `std::default::Default::default()`. + +/// Freestanding version of `std::default::Default::default()`. +/// +/// Used to be available under `#![feature(default_free_fn)]`, +/// removed in https://github.com/rust-lang/rust/pull/113469. +/// +/// # Examples +/// +/// ``` +/// use stdext::prelude::*; +/// +/// #[derive(Default, PartialEq, Eq, Debug)] +/// struct StructWithLongName { +/// a: u32, +/// b: u32, +/// } +/// +/// let s = StructWithLongName { +/// a: 12, +/// ..default() // Normally you have to do +/// // `Default::default()`, +/// // `<_>::default()` or +/// // `StructWithLongName::default()` +/// }; +/// +/// assert_eq!(s, StructWithLongName { a: 12, ..<_>::default() }); +/// ``` +pub fn default() -> T { + T::default() +} diff --git a/src/lib.rs b/src/lib.rs index 4961148..d7c9a4b 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -132,6 +132,7 @@ pub mod duration; #[macro_use] pub mod macros; +pub mod default; pub mod num; pub mod option; pub mod result; @@ -142,6 +143,7 @@ pub mod vec; /// A "prelude" module which re-exports all the extension traits for the simple library usage. pub mod prelude { pub use crate::{ + default::*, duration::*, num::{float_convert::*, integer::*}, option::*,