switchboard_utils/
utils.rs1use rust_decimal::Decimal;
2use std::cmp::Ordering;
3pub use switchboard_common::error::SbError;
4
5pub fn handle_reqwest_err(e: reqwest::Error) -> SbError {
6 let status = e.status().unwrap_or(reqwest::StatusCode::default());
7 SbError::CustomError {
8 message: format!(
9 "reqwest_error: code = {}, message = {}",
10 status,
11 status.canonical_reason().unwrap_or("Unknown")
12 ),
13 source: std::sync::Arc::new(e),
14 }
15}
16
17pub fn median(mut values: Vec<Decimal>) -> Option<Decimal> {
18 if values.is_empty() {
19 return None;
20 }
21 values.sort_by(|a, b| a.partial_cmp(b).unwrap_or(Ordering::Equal));
22 let mid = values.len() / 2;
23 if values.len() % 2 == 0 {
24 Some((values[mid - 1] + values[mid]) / Decimal::TWO)
25 } else {
26 Some(values[mid])
27 }
28}