1pub fn get_all_before_strict<'a>(text: &'a str, begin: &str) -> Option<&'a str> {
10 let begin = text.find(begin)?;
11 Some(&text[..begin])
12}
13
14pub fn get_all_after_strict<'a>(text: &'a str, end: &str) -> Option<&'a str> {
23 let end = text.find(end)? + end.len();
24 Some(&text[end..])
25}
26
27pub fn get_idx_before_strict<'a>(text: &'a str, begin: &str) -> Option<usize> {
36 text.find(begin)
37}
38
39pub fn get_idx_before(text: &str, begin: &str) -> usize {
48 if let Some(idx) = text.find(begin) {
49 return idx
50 } else {
51 return text.len();
52 }
53}
54
55pub fn get_idx_after_strict<'a>(text: &'a str, end: &str) -> Option<usize> {
64 let end = text.find(end)? + end.len();
65 Some(end)
66}
67
68pub fn get_all_between_strict<'a>(text: &'a str, begin: &str, end: &str) -> Option<&'a str> {
77 let text = get_all_after_strict(text, begin)?;
78 let text = get_all_before_strict(text, end)?;
79 Some(text)
80}
81
82pub fn get_idx_between_strict<'a>(text: &'a str, begin: &str, end: &str) -> Option<(usize, usize)> {
83 let after = get_idx_after_strict(text, begin)?;
84 let before = get_idx_before_strict(&text[after..], end)?;
85 Some((after, after + before))
86}
87
88pub fn get_all_before<'a>(text: &'a str, begin: &str) -> &'a str {
89 let begin = text.find(begin).unwrap_or(text.len());
90 &text[..begin]
91}
92
93pub fn get_all_after<'a>(text: &'a str, end: &str) -> &'a str {
94 if let Some(mut end_index) = text.find(end) {
95 end_index += end.len();
96 return &text[end_index..];
97 } else {
98 return "";
99 }
100}
101
102pub fn get_all_between<'a>(text: &'a str, begin: &str, end: &str) -> &'a str {
103 let text = get_all_after(text, begin);
104 let text = get_all_before(text, end);
105 text
106}
107
108#[cfg(test)]
109mod tests {
110 use super::*;
111
112 #[test]
113 fn string_tools_test() {
114 assert_eq!(Some("test"), get_all_before_strict("testlol", "lol"));
115 assert_eq!(Some("test"), get_all_before_strict("testloltestlol", "lol"));
116 assert_eq!(Some("lol"), get_all_after_strict("testlol", "test"));
117 assert_eq!(Some("testlol"), get_all_after_strict("testloltestlol", "lol"));
118 assert_eq!(Some("str3str4"), get_all_between_strict("str1str2str3str4str5", "str2", "str5"));
119 assert_eq!(Some("str3str4"), get_all_between_strict("str5str1str2str3str4str5str2str3str5", "str2", "str5"));
120 assert_eq!(None, get_all_before_strict("str1str2", "str3"));
121 assert_eq!("str1str2", get_all_before("str1str2", "str3"));
122 assert_eq!(None, get_all_after_strict("str1str2", "str3"));
123 assert_eq!("", get_all_after("str1str2", "str3"));
124 assert_eq!("str2str3", get_all_between("str1str2str3str4", "str1", "str4"));
125 assert_eq!("", get_all_between("str1str2str3str4", "str0", "str4"));
126 assert_eq!("str2str3str4", get_all_between("str1str2str3str4", "str1", "str6"));
127 }
128}