Skip to content

Commit e051305

Browse files
authored
refactor: handle unwrap (#16)
* refactor: handle unwrap * fix: lint
1 parent 17f9414 commit e051305

File tree

6 files changed

+317
-239
lines changed

6 files changed

+317
-239
lines changed

src/daterange.rs

+11-4
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,12 @@ pub fn get_monthly_date_ranges(
99
if from.day() != 1 {
1010
return Err(anyhow::anyhow!("from must be 1st day of month"));
1111
}
12-
if to.checked_add_signed(Duration::days(1)).unwrap().day() != 1 {
12+
if to
13+
.checked_add_signed(Duration::days(1))
14+
.ok_or_else(|| anyhow::anyhow!("checked_add_signed"))?
15+
.day()
16+
!= 1
17+
{
1318
return Err(anyhow::anyhow!("to must be last day of month"));
1419
}
1520

@@ -19,14 +24,16 @@ pub fn get_monthly_date_ranges(
1924
loop {
2025
let end = start
2126
.checked_add_months(Months::new(1))
22-
.unwrap()
27+
.ok_or_else(|| anyhow::anyhow!("checked_add_months"))?
2328
.pred_opt()
24-
.unwrap();
29+
.ok_or_else(|| anyhow::anyhow!("pred_opt"))?;
2530
result.push((start, end));
2631
if to == end {
2732
break;
2833
}
29-
start = start.checked_add_months(Months::new(1)).unwrap()
34+
start = start
35+
.checked_add_months(Months::new(1))
36+
.ok_or_else(|| anyhow::anyhow!("checked_add_months"))?
3037
}
3138

3239
Ok(result)

src/github/client.rs

+26-10
Original file line numberDiff line numberDiff line change
@@ -51,17 +51,25 @@ impl Client {
5151

5252
match response {
5353
Ok(res) => {
54-
let prs = &res.data.as_ref().unwrap().search;
54+
let prs = match res.data.as_ref() {
55+
Some(data) => &data.search,
56+
None => break,
57+
};
5558
let has_next_page = prs.page_info.has_next_page;
5659
let end_cursor = prs.page_info.end_cursor.clone();
5760

58-
for item in prs.nodes.as_ref().unwrap().iter().flatten() {
59-
match item {
61+
match prs.nodes.as_ref() {
62+
Some(nodes) => {
63+
for node in nodes.iter().flatten() {
64+
match node {
6065
pull_requests_query::PullRequestsQuerySearchNodes::PullRequest(pr) => {
6166
result.add(PullRequest::new(pr.clone()))
6267
}
6368
_ => continue,
6469
};
70+
}
71+
}
72+
None => break,
6573
}
6674

6775
if !has_next_page {
@@ -101,17 +109,25 @@ impl Client {
101109

102110
match response {
103111
Ok(res) => {
104-
let issues = &res.data.as_ref().unwrap().search;
112+
let issues = match res.data.as_ref() {
113+
Some(data) => &data.search,
114+
None => break,
115+
};
105116
let has_next_page = issues.page_info.has_next_page;
106117
let end_cursor = issues.page_info.end_cursor.clone();
107118

108-
for item in issues.nodes.as_ref().unwrap().iter().flatten() {
109-
match item {
110-
issues_query::IssuesQuerySearchNodes::Issue(issue) => {
111-
result.add(Issue::new(issue.clone()))
119+
match issues.nodes.as_ref() {
120+
Some(nodes) => {
121+
for node in nodes.iter().flatten() {
122+
match node {
123+
issues_query::IssuesQuerySearchNodes::Issue(issue) => {
124+
result.add(Issue::new(issue.clone()))
125+
}
126+
_ => continue,
127+
};
112128
}
113-
_ => continue,
114-
};
129+
}
130+
None => break,
115131
}
116132

117133
if !has_next_page {

src/github/issue.rs

+24-22
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ impl Issue {
2828
.nodes
2929
.as_ref()?
3030
.iter()
31-
.map(|assignee| assignee.as_ref().unwrap().login.clone())
31+
.filter_map(|assignee| assignee.as_ref().map(|assignee| assignee.login.clone()))
3232
.collect();
3333
if result.is_empty() {
3434
return None;
@@ -43,7 +43,11 @@ impl Issue {
4343
.nodes
4444
.as_ref()?
4545
.iter()
46-
.map(|participant| participant.as_ref().unwrap().login.clone())
46+
.filter_map(|participant| {
47+
participant
48+
.as_ref()
49+
.map(|participant| participant.login.clone())
50+
})
4751
.collect();
4852
if result.is_empty() {
4953
return None;
@@ -56,28 +60,26 @@ impl Issue {
5660
}
5761

5862
pub fn comments_count(&self) -> i64 {
59-
let comments = self.inner.comments.nodes.as_ref();
60-
61-
comments.unwrap().len() as i64
63+
match self.inner.comments.nodes.as_ref() {
64+
Some(nodes) => nodes.len() as i64,
65+
None => 0,
66+
}
6267
}
6368

6469
pub fn comments_count_by(&self, by: &str) -> i64 {
65-
let comments = self.inner.comments.nodes.as_ref();
66-
67-
comments
68-
.as_ref()
69-
.unwrap()
70-
.iter()
71-
.filter(|item| match item {
72-
Some(item) => {
73-
if item.author.as_ref().is_none() {
74-
return false;
75-
}
76-
item.author.as_ref().unwrap().login == by
77-
}
78-
_ => false,
79-
})
80-
.count() as i64
70+
match self.inner.comments.nodes.as_ref() {
71+
Some(nodes) => nodes
72+
.iter()
73+
.filter(|item| match item {
74+
Some(item) => match item.author.as_ref() {
75+
Some(author) => author.login == by,
76+
None => false,
77+
},
78+
_ => false,
79+
})
80+
.count() as i64,
81+
None => 0,
82+
}
8183
}
8284

8385
pub fn closed_at(&self) -> Option<DateTime> {
@@ -98,7 +100,7 @@ impl Issue {
98100
return None;
99101
}
100102

101-
let closed_event = timeline_items.first().unwrap();
103+
let closed_event = timeline_items.first()?;
102104

103105
if closed_event.actor.as_ref()?.login != by {
104106
return None;

src/github/issues.rs

+14-13
Original file line numberDiff line numberDiff line change
@@ -77,11 +77,13 @@ impl Issues {
7777
let mut count = 0;
7878
let mut total_seconds = 0;
7979
for issue in self.inner.iter() {
80-
if issue.closed_at().is_none() {
81-
continue;
82-
};
83-
count += 1;
84-
total_seconds += issue.closed_at().unwrap().diff_seconds(&issue.created_at());
80+
match issue.closed_at() {
81+
Some(closed_at) => {
82+
count += 1;
83+
total_seconds += closed_at.diff_seconds(&issue.created_at());
84+
}
85+
None => continue,
86+
}
8587
}
8688
if count == 0 {
8789
0.0
@@ -94,14 +96,13 @@ impl Issues {
9496
let mut count = 0;
9597
let mut total_seconds = 0;
9698
for issue in self.inner.iter() {
97-
if issue.closed_at_by(by).is_none() {
98-
continue;
99-
};
100-
count += 1;
101-
total_seconds += issue
102-
.closed_at_by(by)
103-
.unwrap()
104-
.diff_seconds(&issue.created_at());
99+
match issue.closed_at_by(by) {
100+
Some(closed_at_by) => {
101+
count += 1;
102+
total_seconds += closed_at_by.diff_seconds(&issue.created_at());
103+
}
104+
None => continue,
105+
}
105106
}
106107
if count == 0 {
107108
0.0

0 commit comments

Comments
 (0)