1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
//! Additional features for the Rust standard library. //! //! ## Description //! //! This crate contains enhancements to the Rust standard library types, useful for //! broad audience, but not yet implemented (or stabilized) in `std`. //! //! Crate is designed to be lightweight (no external dependencies!) and provide essential //! functionality which possible can get to the `std` some day. //! //! ## Extension traits //! //! All the new functionality the stanard library is added using extension traits. //! //! Below you can find the table of all the extension traits introduced by this crate: //! //! | `std` structure | extension traits //! | --- | --- //! | [`Vec`] | [`VecExt`] and [`VecExtClone`] //! | [`&str`] | [`StrExt`] //! | [`Option`] | [`OptionExt`] //! | [`Result`] | [`ResultExt`] //! | [`Duration`] | [`DurationExt`] //! | [`RwLock`] | [`RwLockExt`] //! | [`Mutex`] | [`MutexExt`] //! //! [`Vec`]: https://doc.rust-lang.org/std/vec/struct.Vec.html //! [`&str`]: https://doc.rust-lang.org/std/primitive.str.html //! [`Option`]: https://doc.rust-lang.org/std/option/enum.Option.html //! [`Result`]: https://doc.rust-lang.org/std/result/enum.Result.html //! [`Duration`]: https://doc.rust-lang.org/std/time/struct.Duration.html //! [`RwLock`]: https://doc.rust-lang.org/std/sync/struct.RwLock.html //! [`Mutex`]: https://doc.rust-lang.org/std/sync/struct.Mutex.html //! //! [`VecExt`]: vec/trait.VecExt.html //! [`VecExtClone`]: vec/trait.VecExtClone.html //! [`StrExt`]: str/trait.StrExt.html //! [`OptionExt`]: option/trait.OptionExt.html //! [`ResultExt`]: result/trait.ResultExt.html //! [`DurationExt`]: duration/trait.DurationExt.html //! [`RwLockExt`]: sync/rw_lock/trait.RwLockExt.html //! [`MutexExt`]: sync/mutex/trait.MutexExt.html //! //! ## Highlights //! //! - Convenient builder methods for **`Duration`**: //! //! ```rust //! use stdext::prelude::*; //! //! let duration = Duration::from_minutes(1).add_seconds(5).add_micros(100); //! assert_eq!(duration, Duration::new(61, 100_000)); //! ``` //! //! - Panicking version for **`RwLock::read`**, **`RwLock::write`** and **`Mutex::lock`** (for //! fellows who don't really handle the lock poisoning): //! //! ```rust //! use std::sync::{Arc, RwLock}; //! use stdext::prelude::*; //! //! let lock = Arc::new(RwLock::new(1)); //! { //! let mut n = lock.force_write(); // Instead of `.write().unwrap()`. //! *n = 2; //! } //! let n = lock.force_read(); //! assert_eq!(*n, 2); //! ``` //! //! - **`Result::combine`** and **`Option::combine`** to zip pairs of objects: //! //! ```rust //! use stdext::prelude::*; //! //! let x = Some(1); //! let y = Some("hi"); //! let z = None::<u8>; //! //! assert_eq!(x.combine(y), Some((1, "hi"))); //! assert_eq!(x.combine(z), None); //! //! let x = Ok(1); //! let y = Ok("hi"); //! let z: Result<i32, &str> = Err("error"); //! let z2: Result<i32, &str> = Err("other_error"); //! //! assert_eq!(x.combine(y), Ok((1, "hi"))); //! assert_eq!(x.combine(z), Err("error")); //! assert_eq!(z.combine(z2), Err("error")); //! ``` pub mod duration; pub mod option; pub mod result; pub mod str; pub mod sync; pub mod vec; /// A "prelude" module which re-exports all the extension traits for the simple library usage. pub mod prelude { pub use crate::{ duration::*, option::*, result::*, str::*, sync::{mutex::*, rw_lock::*}, vec::*, }; }