split_optional/
lib.rs

1pub fn split2<'a>(input: &'a str, delimiter: &str) -> (Option<&'a str>, Option<&'a str>)
2{
3 match input.split_once(delimiter)
4 {
5  Some((a, b)) => (Some(a.trim()), Some(b.trim())),
6  _ => (Some(input), None)
7 }
8}
9
10pub fn split3<'a>(input: &'a str, delimiter: &str) -> (Option<&'a str>, Option<&'a str>, Option<&'a str>)
11{
12 let (a, tail) = split2(input, delimiter);
13 let (b, c) = match tail
14 {
15  Some(tail) => split2(tail, delimiter),
16  None => (None, None)
17 };
18 (a, b, c)
19}
20
21pub fn split4<'a>(input: &'a str, delimiter: &str) -> (Option<&'a str>, Option<&'a str>, Option<&'a str>, Option<&'a str>)
22{
23 let (a, b, tail) = split3(input, delimiter);
24 let (c, d) = match tail
25 {
26  Some(tail) => split2(tail, delimiter),
27  None => (None, None)
28 };
29 (a, b, c, d)
30}
31
32pub fn split5<'a>(input: &'a str, delimiter: &str)
33 -> (Option<&'a str>, Option<&'a str>, Option<&'a str>, Option<&'a str>, Option<&'a str>)
34{
35 let (a, b, c, tail) = split4(input, delimiter);
36 let (d, e) = match tail
37 {
38  Some(tail) => split2(tail, delimiter),
39  None => (None, None)
40 };
41 (a, b, c, d, e)
42}
43
44pub fn split6<'a>(
45 input: &'a str,
46 delimiter: &str
47) -> (
48 Option<&'a str>,
49 Option<&'a str>,
50 Option<&'a str>,
51 Option<&'a str>,
52 Option<&'a str>,
53 Option<&'a str>
54)
55{
56 let (a, b, c, d, tail) = split5(input, delimiter);
57 let (e, f) = match tail
58 {
59  Some(tail) => split2(tail, delimiter),
60  None => (None, None)
61 };
62 (a, b, c, d, e, f)
63}
64
65pub fn split7<'a>(
66 input: &'a str,
67 delimiter: &str
68) -> (
69 Option<&'a str>,
70 Option<&'a str>,
71 Option<&'a str>,
72 Option<&'a str>,
73 Option<&'a str>,
74 Option<&'a str>,
75 Option<&'a str>
76)
77{
78 let (a, b, c, d, e, tail) = split6(input, delimiter);
79 let (f, g) = match tail
80 {
81  Some(tail) => split2(tail, delimiter),
82  None => (None, None)
83 };
84 (a, b, c, d, e, f, g)
85}
86
87pub fn split8<'a>(
88 input: &'a str,
89 delimiter: &str
90) -> (
91 Option<&'a str>,
92 Option<&'a str>,
93 Option<&'a str>,
94 Option<&'a str>,
95 Option<&'a str>,
96 Option<&'a str>,
97 Option<&'a str>,
98 Option<&'a str>
99)
100{
101 let (a, b, c, d, e, f, tail) = split7(input, delimiter);
102 let (g, h) = match tail
103 {
104  Some(tail) => split2(tail, delimiter),
105  None => (None, None)
106 };
107 (a, b, c, d, e, f, g, h)
108}