aboutsummaryrefslogtreecommitdiff
path: root/crates/stdx/src
diff options
context:
space:
mode:
Diffstat (limited to 'crates/stdx/src')
-rw-r--r--crates/stdx/src/lib.rs29
1 files changed, 21 insertions, 8 deletions
diff --git a/crates/stdx/src/lib.rs b/crates/stdx/src/lib.rs
index 13aab1451..d9a62e943 100644
--- a/crates/stdx/src/lib.rs
+++ b/crates/stdx/src/lib.rs
@@ -25,6 +25,27 @@ pub fn timeit(label: &'static str) -> impl Drop {
25 Guard { label, start: Instant::now() } 25 Guard { label, start: Instant::now() }
26} 26}
27 27
28/// Prints backtrace to stderr, useful for debugging.
29#[cfg(feature = "backtrace")]
30pub fn print_backtrace() {
31 let bt = backtrace::Backtrace::new();
32 eprintln!("{:?}", bt);
33}
34#[cfg(not(feature = "backtrace"))]
35pub fn print_backtrace() {
36 eprintln!(
37 r#"Enable the backtrace feature.
38Uncomment `default = [ "backtrace" ]` in `crates/stdx/Cargo.toml`.
39"#
40 );
41}
42
43pub fn to_lower_snake_case(s: &str) -> String {
44 to_snake_case(s, char::to_ascii_lowercase)
45}
46pub fn to_upper_snake_case(s: &str) -> String {
47 to_snake_case(s, char::to_ascii_uppercase)
48}
28fn to_snake_case<F: Fn(&char) -> char>(s: &str, change_case: F) -> String { 49fn to_snake_case<F: Fn(&char) -> char>(s: &str, change_case: F) -> String {
29 let mut buf = String::with_capacity(s.len()); 50 let mut buf = String::with_capacity(s.len());
30 let mut prev = false; 51 let mut prev = false;
@@ -43,14 +64,6 @@ fn to_snake_case<F: Fn(&char) -> char>(s: &str, change_case: F) -> String {
43 buf 64 buf
44} 65}
45 66
46pub fn to_lower_snake_case(s: &str) -> String {
47 to_snake_case(s, char::to_ascii_lowercase)
48}
49
50pub fn to_upper_snake_case(s: &str) -> String {
51 to_snake_case(s, char::to_ascii_uppercase)
52}
53
54pub fn replace(buf: &mut String, from: char, to: &str) { 67pub fn replace(buf: &mut String, from: char, to: &str) {
55 if !buf.contains(from) { 68 if !buf.contains(from) {
56 return; 69 return;