1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
use anyhow::{anyhow, Result};
use regex::Regex;
use serde::{Deserialize, Serialize};
use crate::constants;
#[allow(non_snake_case)]
#[derive(Deserialize, Serialize, Builder, Default, Clone)]
#[builder(default)]
pub struct BackendTask {
pub BuildNo: String,
pub PR: u64,
pub RepoName: String,
pub Member: String,
}
fn get_value_by_field(f: &str, s: &str) -> Option<String> {
let re = Regex::new(&format!(r"{f}:\s*(?P<v>.+?)((\r?\n)|$)")).unwrap();
if let Some(m) = re.captures(s) {
m.name("v").map(|s| s.as_str().trim().to_owned())
} else {
None
}
}
pub fn get_backend_task_from_str(
s: &str,
repo: String,
pr_number: u64,
member: String,
) -> Result<BackendTask> {
let mut t = BackendTaskBuilder::default();
if let Some(v) = get_value_by_field("BN", s) {
t.BuildNo(v);
} else {
return Err(anyhow!(format!(
"{img}\r\n Build number is required.\r\n Please read the {doc}",
img = constants::FAIL_IMAGE_URL,
doc = constants::DOC_URL
)));
}
t.RepoName(repo);
t.PR(pr_number);
t.Member(member);
Ok(t.build().unwrap())
}
#[cfg(test)]
mod test {
#[test]
fn test_get_value() {
use super::*;
let s = r#"BN: 7.3.3.4.9064.0015
evanl00"#;
let v = get_value_by_field("BN", s);
assert_eq!(v.unwrap(), "7.3.3.4.9064.0015");
let s = "BN: 7.3.3.4.9064.0015\r\n";
let v = get_value_by_field("BN", s);
assert_eq!(v.unwrap(), "7.3.3.4.9064.0015");
}
#[test]
fn test_get_backend_task() {
use super::get_backend_task_from_str;
let s = r#"BN: 7.3.3.4.9064.0015
"#;
let t = get_backend_task_from_str(s, "ro".to_string(), 121, "mt".to_owned());
assert_eq!(t.unwrap().BuildNo, "7.3.3.4.9064.0015");
let s = r#"BN: 7.3.3.4.9064.0015"#;
let t = get_backend_task_from_str(s, "ro".to_string(), 121, "mt".to_owned());
assert_eq!(t.unwrap().BuildNo, "7.3.3.4.9064.0015");
}
#[test]
fn test_get_backend_task_no_task() {
use super::*;
let s = r#"BNE: 7.3.3.4.9064.0015
"#;
let t = get_backend_task_from_str(s, "ro".to_string(), 121, "mt".to_owned());
assert_eq!(true, t.is_err());
}
}