Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/stdx/src/lib.rs')
-rw-r--r--crates/stdx/src/lib.rs21
1 files changed, 20 insertions, 1 deletions
diff --git a/crates/stdx/src/lib.rs b/crates/stdx/src/lib.rs
index f26c7f6dfc..71e269f74b 100644
--- a/crates/stdx/src/lib.rs
+++ b/crates/stdx/src/lib.rs
@@ -1,6 +1,6 @@
//! Missing batteries for standard libraries.
-#![warn(rust_2018_idioms, unused_lifetimes, semicolon_in_expressions_from_macros)]
+#![warn(rust_2018_idioms, unused_lifetimes)]
use std::io as sio;
use std::process::Command;
@@ -15,6 +15,7 @@ pub mod thread;
pub mod anymap;
pub use always_assert::{always, never};
+pub use itertools;
#[inline(always)]
pub fn is_ci() -> bool {
@@ -40,6 +41,24 @@ Uncomment `default = [ "backtrace" ]` in `crates/stdx/Cargo.toml`.
);
}
+pub trait TupleExt {
+ type Head;
+ type Tail;
+ fn head(self) -> Self::Head;
+ fn tail(self) -> Self::Tail;
+}
+
+impl<T, U> TupleExt for (T, U) {
+ type Head = T;
+ type Tail = U;
+ fn head(self) -> Self::Head {
+ self.0
+ }
+ fn tail(self) -> Self::Tail {
+ self.1
+ }
+}
+
pub fn to_lower_snake_case(s: &str) -> String {
to_snake_case(s, char::to_lowercase)
}