stringqb/src/lib.rs

53 lines
1.2 KiB
Rust

//! # StringQB
//!
//! A query builder using mostly strings, with methods following common SQL syntax
#![warn(missing_docs)]
// Temporarily silence unused variables and uncalled code warnings
// @TODO remove when most of the code is implemented
#![allow(dead_code)]
#![allow(unused_variables)]
pub mod drivers;
pub mod enums;
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::<Vec<String>>()
.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
);
}
}