Skip to content

Commit 75de23d

Browse files
authored
Merge pull request #45 from liweinan/issue-43
清理所有的`unwrap()`
2 parents 746bbab + 9751664 commit 75de23d

File tree

21 files changed

+1235
-1202
lines changed

21 files changed

+1235
-1202
lines changed

htycommons/src/common.rs

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,8 @@ pub fn parse_date_time(date_time: &String) -> anyhow::Result<NaiveDateTime> {
115115
}
116116

117117
pub fn parse_bool(bool_val: &String) -> anyhow::Result<bool> {
118-
Ok(bool_val.trim().parse().unwrap())
118+
bool_val.trim().parse()
119+
.map_err(|e| anyhow::anyhow!("Failed to parse bool: {}", e))
119120
}
120121

121122
pub fn get_some_from_query_params<T: FromStr + Default>(
@@ -159,35 +160,35 @@ pub fn strip_result_vec<T>(in_vec: Vec<anyhow::Result<T>>) -> anyhow::Result<Vec
159160
Ok(out_vec)
160161
}
161162

162-
pub fn extract_filename_from_url(url: &String) -> String {
163-
url.split("/").last().unwrap().to_string()
163+
pub fn extract_filename_from_url(url: &String) -> Option<String> {
164+
url.split("/").last().filter(|s| !s.is_empty()).map(|s| s.to_string())
164165
}
165166

166167
pub fn date_to_string(date: &NaiveDateTime) -> String {
167168
date.format("%Y-%m-%d").to_string()
168169
}
169170

170171
pub fn string_to_datetime(datetime: &Option<String>) -> anyhow::Result<Option<NaiveDateTime>> {
171-
if datetime.is_none() {
172-
return Ok(None);
173-
} else {
172+
if let Some(dt) = datetime {
174173
Ok(Some(NaiveDateTime::parse_from_str(
175-
datetime.as_ref().unwrap().as_str(),
174+
dt.as_str(),
176175
"%Y-%m-%d %H:%M:%S",
177176
)?))
177+
} else {
178+
Ok(None)
178179
}
179180
}
180181

181182
pub fn string_to_date(date: &Option<String>) -> anyhow::Result<Option<NaiveDateTime>> {
182183
debug!("string_to_date -> {:?}", date);
183184

184-
if date.is_none() {
185-
return Ok(None);
186-
} else {
185+
if let Some(d) = date {
187186
Ok(Some(
188-
NaiveDate::parse_from_str(date.as_ref().unwrap().as_str(), "%Y-%m-%d")?
187+
NaiveDate::parse_from_str(d.as_str(), "%Y-%m-%d")?
189188
.and_time(NaiveTime::from_str("00:00:00")?),
190189
))
190+
} else {
191+
Ok(None)
191192
}
192193
}
193194

htycommons/src/db.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ pub fn pool(db_url: &str) -> PgPool {
4747
let max_size = env::var("POOL_SIZE")
4848
.expect("POOL_SIZE must be set")
4949
.parse::<u32>()
50-
.unwrap();
50+
.unwrap_or_else(|e| panic!("Failed to parse POOL_SIZE: {}", e));
5151

5252
Pool::builder()
5353
.max_size(max_size)

htycommons/src/jwt.rs

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,18 @@ pub fn jwt_key() -> String {
2121
}
2222

2323
pub fn jwt_encode_token(token: HtyToken) -> Result<String, HtyErr> {
24-
let t = n_hour_later(&current_local_datetime(), 10000).and_utc().timestamp() as usize;
24+
let t = n_hour_later(&current_local_datetime(), 10000)
25+
.map_err(|e| HtyErr {
26+
code: HtyErrCode::JwtErr,
27+
reason: Some(format!("Failed to calculate expiration time: {}", e)),
28+
})?
29+
.and_utc().timestamp() as usize;
2530
let claims = HtyJwtClaims {
26-
sub: serde_json::to_string(&token).unwrap(),
31+
sub: serde_json::to_string(&token)
32+
.map_err(|e| HtyErr {
33+
code: HtyErrCode::JwtErr,
34+
reason: Some(format!("Failed to serialize token: {}", e)),
35+
})?,
2736
exp: t,
2837
iat: t,
2938
};
@@ -57,7 +66,11 @@ fn _jwt_decode_claims(token: &String, validation: &Validation) -> Result<HtyToke
5766
Ok(v) => {
5867
//debug(format!("decoded obj -> {:?}", v).as_str());
5968
debug!("_jwt_decode_claims -> decoded token: {:?}", v);
60-
Ok(serde_json::from_str::<HtyToken>(v.claims.sub.as_str()).unwrap())
69+
serde_json::from_str::<HtyToken>(v.claims.sub.as_str())
70+
.map_err(|e| HtyErr {
71+
code: HtyErrCode::JwtErr,
72+
reason: Some(format!("Failed to deserialize token: {}", e)),
73+
})
6174
}
6275
Err(err) => Err(wrap_err(JwtErr, Box::from(err))),
6376
}

htycommons/src/lib.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,10 @@ pub fn pass_or_panic2<T>(res: anyhow::Result<T>) {
5353
}
5454
}
5555

56-
pub fn n_hour_later(now: &NaiveDateTime, n: i64) -> NaiveDateTime {
57-
*now + chrono::Duration::try_hours(n).unwrap()
56+
pub fn n_hour_later(now: &NaiveDateTime, n: i64) -> anyhow::Result<NaiveDateTime> {
57+
chrono::Duration::try_hours(n)
58+
.map(|duration| *now + duration)
59+
.ok_or_else(|| anyhow::anyhow!("Invalid number of hours: {}", n))
5860
}
5961

6062
pub fn remove_quote(str: &String) -> String {

htycommons/src/logger.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ pub fn logger_init() -> () {
6464
// let timer = UtcTime::new(time::format_description::well_known::Rfc3339);
6565
// https://rustcc.cn/article?id=66e2a76e-8c65-42f7-a773-66dff1a2a21e
6666
let local_time = OffsetTime::new(
67-
UtcOffset::from_hms(8, 0, 0).unwrap(),
67+
UtcOffset::from_hms(8, 0, 0).unwrap_or_else(|_| UtcOffset::from_hms(0, 0, 0).expect("Failed to create UTC offset")),
6868
format_description!("[year]-[month]-[day] [hour]:[minute]:[second].[subsecond digits:3]"),
6969
);
7070

htycommons/src/pagination.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ pub trait Paginate: Sized {
1111

1212
impl<T> Paginate for T {
1313
fn paginate(self, page: Option<i64>) -> Paginated<Self> {
14-
let offset = if page.is_some() { (page.clone().unwrap() - 1) * DEFAULT_PER_PAGE } else { -1 };
14+
let offset = if let Some(p) = page { (p - 1) * DEFAULT_PER_PAGE } else { -1 };
1515
Paginated {
1616
query: self,
1717
some_per_page: Some(DEFAULT_PER_PAGE),
@@ -35,8 +35,8 @@ pub struct Paginated<T> {
3535

3636
impl<T> Paginated<T> {
3737
pub fn per_page(self, some_per_page: Option<i64>) -> Self {
38-
let per_page = if some_per_page.is_some() { some_per_page.clone().unwrap() } else { -1 };
39-
let offset = if some_per_page.is_some() && self.page.is_some() { (self.page.clone().unwrap() - 1) * some_per_page.clone().unwrap() } else { -1 };
38+
let per_page = some_per_page.unwrap_or(-1);
39+
let offset = if let (Some(sp), Some(p)) = (some_per_page, self.page) { (p - 1) * sp } else { -1 };
4040

4141
Paginated {
4242
some_per_page,
@@ -60,8 +60,7 @@ impl<T> Paginated<T> {
6060

6161
let unwrapped_results = results?;
6262

63-
if some_page.is_some() && some_per_page.is_some() {
64-
let per_page = some_per_page.unwrap();
63+
if let (Some(_), Some(per_page)) = (some_page, some_per_page) {
6564
let total = unwrapped_results.get(0).map(|x| x.1).unwrap_or(0);
6665
let records = unwrapped_results.into_iter().map(|x| x.0).collect();
6766
let total_pages = (total as f64 / per_page as f64).ceil() as i64;

htycommons/src/redis_util.rs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@ pub const OPENID_INFO: &str = "OPENID_INFO_";
1717
pub const CACHED: &str = "C_";
1818

1919

20-
pub fn get_token_expiration_days() -> usize {
20+
pub fn get_token_expiration_days() -> anyhow::Result<usize> {
2121
env::var("EXPIRATION_DAYS")
2222
.expect("EXPIRATION_DAYS not set!!!")
2323
.parse()
24-
.unwrap()
24+
.map_err(|e| anyhow::anyhow!("Failed to parse EXPIRATION_DAYS: {}", e))
2525
}
2626

2727
pub fn get_redis_url() -> anyhow::Result<String> {
@@ -50,7 +50,7 @@ pub fn save_token_with_exp_days(token: &HtyToken, expiration_day: usize) -> anyh
5050
prefix_key.push_str(token.clone().token_id.as_str());
5151

5252
save_kv_to_redis_with_exp_days(&prefix_key,
53-
&jwt_encode_token(token.clone()).unwrap(),
53+
&jwt_encode_token(token.clone())?,
5454
expiration_day)
5555
}
5656

@@ -79,7 +79,7 @@ pub fn save_kv_to_redis(key: &String, value: &String) -> anyhow::Result<()> {
7979

8080
let mut prefix_key = HTY_REDIS_KEY_PREFIX.to_string();
8181
prefix_key.push_str(key);
82-
let redis_url = get_redis_url().unwrap();
82+
let redis_url = get_redis_url()?;
8383

8484
match Client::open(redis_url.clone()) {
8585
Ok(cli) => match cli.get_connection() {
@@ -113,7 +113,7 @@ pub fn save_kv_to_redis_with_exp_secs(key: &String, value: &String, expiration_s
113113

114114
let mut prefix_key = HTY_REDIS_KEY_PREFIX.to_string();
115115
prefix_key.push_str(key);
116-
let redis_url = get_redis_url().unwrap();
116+
let redis_url = get_redis_url()?;
117117

118118
match Client::open(redis_url.clone()) {
119119
Ok(cli) => match cli.get_connection() {
@@ -153,7 +153,7 @@ pub fn get_value_from_redis(key: &String) -> anyhow::Result<String> {
153153
let mut prefix_key = HTY_REDIS_KEY_PREFIX.to_string();
154154
prefix_key.push_str(key);
155155
debug!("get_value_from_redis() -> key / {:?}", &prefix_key);
156-
let redis_url = get_redis_url().unwrap();
156+
let redis_url = get_redis_url()?;
157157
let mut redis_conn = Client::open(redis_url.clone())?.get_connection()?;
158158
let value = redis_conn.get(prefix_key)?;
159159
debug!("get_value_from_redis() -> token : {:?}", value);
@@ -164,15 +164,15 @@ pub fn get_opt_value_from_redis(key: &String) -> anyhow::Result<Option<String>>
164164
let mut prefix_key = HTY_REDIS_KEY_PREFIX.to_string();
165165
prefix_key.push_str(key);
166166
debug!("get_value_from_redis2() -> key / {:?}", &prefix_key);
167-
let redis_url = get_redis_url().unwrap();
167+
let redis_url = get_redis_url()?;
168168
let mut redis_conn = Client::open(redis_url.clone())?.get_connection()?;
169169
let value = redis_conn.get(prefix_key)?;
170170
debug!("get_value_from_redis2() -> token : {:?}", value);
171171
Ok(value)
172172
}
173173

174174
pub fn is_key_exist_in_redis(key: &String) -> anyhow::Result<bool> {
175-
let redis_url = get_redis_url().unwrap();
175+
let redis_url = get_redis_url()?;
176176

177177
let mut prefix_key = HTY_REDIS_KEY_PREFIX.to_string();
178178
prefix_key.push_str(key);
@@ -187,7 +187,7 @@ pub fn is_key_exist_in_redis(key: &String) -> anyhow::Result<bool> {
187187
pub fn verify_jwt(jwt_token: &String) -> anyhow::Result<()> {
188188
dotenv().ok();
189189
//Save token to redis
190-
let redis_url = get_redis_url().unwrap();
190+
let redis_url = get_redis_url()?;
191191
debug!("verify_jwt -> redis_url / {:?}", redis_url.clone());
192192
debug!("verify_jwt -> jwt_token to verify: {:?}", jwt_token.clone());
193193

@@ -227,7 +227,7 @@ pub fn del_from_redis(key: &String) -> anyhow::Result<String> {
227227
let mut prefix_key = HTY_REDIS_KEY_PREFIX.to_string();
228228
prefix_key.push_str(key);
229229

230-
let redis_url = get_redis_url().unwrap();
230+
let redis_url = get_redis_url()?;
231231

232232
let mut redis_conn = Client::open(redis_url.clone())?.get_connection()?;
233233

htycommons/src/test_scaffold.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,9 +74,9 @@ pub fn my_assert_not_none<T: Eq + Debug>(val: &Option<T>) -> Result<(), HtyErr>
7474
}
7575

7676

77-
pub fn get_test_app_domain() -> u16 {
77+
pub fn get_test_app_domain() -> anyhow::Result<u16> {
7878
env::var("TEST_APP_DOMAIN")
7979
.expect("TEST_APP_DOMAIN not set!!!")
8080
.parse()
81-
.unwrap()
81+
.map_err(|e| anyhow::anyhow!("Failed to parse TEST_APP_DOMAIN: {}", e))
8282
}

htycommons/src/upyun.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,8 @@ pub async fn upyun_delete_by_filename(in_filename: &String, sudoer: &String, hos
7272
let url = format!("{}/image/upyun_remove", get_ngx_url());
7373
debug!("upyun_delete_by_filename -> url: {}", url);
7474

75-
let body = serde_json::to_string::<UpyunFilename>(&upyun_filename).unwrap();
75+
let body = serde_json::to_string::<UpyunFilename>(&upyun_filename)
76+
.map_err(|e| anyhow::anyhow!("Failed to serialize upyun_filename: {}", e))?;
7677
debug!("upyun_delete_by_filename -> body: {}", body);
7778

7879

0 commit comments

Comments
 (0)