1pub fn read_str_to_lines(s: &str) -> Vec<String> {
3 s.lines().map(|ln| ln.to_owned()).collect()
4}
5
6pub fn split_kv(s: &str, split: char) -> (String, String) {
7 let mut k = String::new();
8 let mut v = String::new();
9
10 let mut is_splited = false;
11 let cs = s.chars();
12 for c in cs {
13 if is_splited {
14 v.push(c);
15 } else if c == split {
16 is_splited = true;
17 } else {
18 k.push(c);
19 }
20 }
21
22 (k, v)
23}
24
25
26#[test]
27fn test_split_kv() {
28 assert_eq!(("".to_owned(), "".to_owned()), split_kv("", '='));
29 assert_eq!(("aaaa".to_owned(), "".to_owned()), split_kv("aaaa", '='));
30 assert_eq!(("".to_owned(), "aaaa".to_owned()), split_kv("=aaaa", '='));
31 assert_eq!(("aa".to_owned(), "bb".to_owned()), split_kv("aa=bb", '='));
32 assert_eq!(("aa".to_owned(), "bb".to_owned()), split_kv("aa:bb", ':'));
33}
34
35#[test]
36fn test_read_str_to_lines() {
37 {
38 let s = "";
39 let lines = read_str_to_lines(s);
40 assert_eq!(lines.len(), 0);
41 }
42 {
43 let s = "\n";
44 let lines = read_str_to_lines(s);
45 assert_eq!(lines.len(), 1);
46 }
47 {
48 let s = "\r";
49 let lines = read_str_to_lines(s);
50 assert_eq!(lines.len(), 1);
51 }
52 {
53 let s = "\r\n";
54 let lines = read_str_to_lines(s);
55 assert_eq!(lines.len(), 1);
56 }
57 {
58 let s = "aa\r\nbb";
59 let lines = read_str_to_lines(s);
60 assert_eq!(lines.len(), 2);
61 assert_eq!(lines[0], "aa");
62 assert_eq!(lines[1], "bb");
63 }
64 {
65 let s = "aa\r\nbb\ncc";
66 let lines = read_str_to_lines(s);
67 assert_eq!(lines.len(), 3);
68 assert_eq!(lines[0], "aa");
69 assert_eq!(lines[1], "bb");
70 assert_eq!(lines[2], "cc");
71 }
72}