1#![feature(let_chains)]
2
3pub fn ver_incr(ver: &str) -> String {
4 let mut iter = ver.char_indices().rev();
5 let mut end = None;
6 let mut start = None;
7
8 for (i, c) in &mut iter {
10 if c.is_ascii_digit() {
11 end = Some(i + 1);
12 start = Some(i);
13 break;
14 }
15 }
16
17 if end.is_some() {
19 for (i, c) in iter {
20 if c.is_ascii_digit() {
21 start = Some(i);
22 } else {
23 break;
24 }
25 }
26 }
27
28 if let Some(start) = start
29 && let Some(end) = end
30 {
31 let num: u64 = ver[start..end].parse().unwrap();
32 let new_num = num + 1;
33 let new_ver = format!("{}{}{}", &ver[..start], new_num, &ver[end..]);
34 new_ver
35 } else {
36 format!("{}.0", ver)
38 }
39}