switchboard_utils/
utils.rs

1use 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}