OrangeGuidanceTomestone/server/src/web/packs.rs
2022-09-08 16:24:05 -04:00

27 lines
660 B
Rust

use std::sync::Arc;
use warp::{Filter, Rejection, Reply};
use warp::filters::BoxedFilter;
use crate::{Pack, State};
pub fn packs(state: Arc<State>) -> BoxedFilter<(impl Reply, )> {
warp::get()
.and(warp::path("packs"))
.and(warp::path::end())
.and_then(move || logic(Arc::clone(&state)))
.boxed()
}
async fn logic(state: Arc<State>) -> Result<impl Reply, Rejection> {
let mut visible: Vec<Pack> = state.packs.read()
.await
.values()
.filter(|pack| pack.visible)
.cloned()
.collect();
visible.sort_unstable_by_key(|pack| pack.order);
Ok(warp::reply::json(&visible))
}