//! # StringQB //! //! A query builder using mostly strings, with methods following common SQL syntax // #![warn(missing_docs)] pub mod drivers; pub mod query_builder; pub mod types; /// Split a string, apply a closure to each substring, /// then join the string back together /// /// For example: /// ``` /// use stringqb::split_map_join; /// /// let result = split_map_join("a\n,b, c\t,d", ",", |s| s.trim().to_string()); /// assert_eq!("a,b,c,d", result); /// ``` pub fn split_map_join<'a>( string: &'a str, split_join_by: &str, map_fn: impl (FnMut(&'a str) -> String), ) -> String { string .split(split_join_by) .into_iter() .map(map_fn) .collect::>() .join(split_join_by) } #[cfg(test)] mod tests { use super::*; #[test] fn test_split_map_join() { let start = "a\t,b ,c\n,d"; let expected = "a,b,c,d"; assert_eq!( split_map_join(start, ",", |s| s.trim().to_string()), expected ); } }