diff --git a/server/packs/bloodborne.yaml b/server/packs/bloodborne.yaml index e0b05bd..2b98612 100644 --- a/server/packs/bloodborne.yaml +++ b/server/packs/bloodborne.yaml @@ -1,5 +1,7 @@ name: Bloodborne id: bd4f9382-4ec7-4457-ba40-bdf5e5ee7fd0 +visible: true +order: 3 templates: - 'fear {0}' diff --git a/server/packs/dark-souls.yaml b/server/packs/dark-souls.yaml index 87cd662..d6a7d0a 100644 --- a/server/packs/dark-souls.yaml +++ b/server/packs/dark-souls.yaml @@ -1,5 +1,7 @@ name: Dark Souls id: d8be51e4-ddce-4c91-9adf-a7a42457da28 +visible: true +order: 4 templates: - '{0} ahead' diff --git a/server/packs/elden-ring.yaml b/server/packs/elden-ring.yaml index 5d4839f..b25f480 100644 --- a/server/packs/elden-ring.yaml +++ b/server/packs/elden-ring.yaml @@ -1,5 +1,7 @@ name: Elden Ring id: 8169c792-3d7c-44eb-aeee-9823c8521ae6 +visible: true +order: 2 templates: - '{0} ahead' diff --git a/server/packs/ffxiv.yaml b/server/packs/ffxiv.yaml index aee9c28..df0d75e 100644 --- a/server/packs/ffxiv.yaml +++ b/server/packs/ffxiv.yaml @@ -1,5 +1,7 @@ name: FINAL FANTASY XIV id: 120e0e08-9533-454b-bfab-f8774a5b6d80 +visible: true +order: 1 templates: - '{0} ahead' diff --git a/server/packs/ffxiv_old.yaml b/server/packs/ffxiv_old.yaml index 6d4d493..98b94fa 100644 --- a/server/packs/ffxiv_old.yaml +++ b/server/packs/ffxiv_old.yaml @@ -1,5 +1,6 @@ name: FINAL FANTASY XIV (v1) id: 7cd9e479-080a-4fec-9511-41a53034c2ad +visible: false templates: - '{0} ahead' diff --git a/server/packs/ffxiv_old2.yaml b/server/packs/ffxiv_old2.yaml index e2871a7..f3ddd16 100644 --- a/server/packs/ffxiv_old2.yaml +++ b/server/packs/ffxiv_old2.yaml @@ -1,5 +1,6 @@ name: FINAL FANTASY XIV (v2) id: 7fe38343-efb5-477b-a17f-71d910ae075b +visible: false templates: - '{0} ahead' diff --git a/server/packs/ffxiv_old3.yaml b/server/packs/ffxiv_old3.yaml index 1db654b..e2ec361 100644 --- a/server/packs/ffxiv_old3.yaml +++ b/server/packs/ffxiv_old3.yaml @@ -1,5 +1,6 @@ name: FINAL FANTASY XIV (v3) id: 43cf8e42-43fe-42cf-b989-6446e30fa914 +visible: false templates: - '{0} ahead' diff --git a/server/src/pack.rs b/server/src/pack.rs index 236fa94..074c6ae 100644 --- a/server/src/pack.rs +++ b/server/src/pack.rs @@ -1,16 +1,20 @@ -use serde::Deserialize; +use serde::{Deserialize, Serialize}; use uuid::Uuid; -#[derive(Debug, Deserialize)] +#[derive(Debug, Deserialize, Serialize, Clone)] pub struct Pack { pub name: String, pub id: Uuid, + #[serde(skip_serializing)] + pub visible: bool, + #[serde(default, skip_serializing)] + pub order: u8, pub templates: Vec, pub conjunctions: Vec, pub words: Vec, } -#[derive(Debug, Deserialize)] +#[derive(Debug, Deserialize, Serialize, Clone)] pub struct WordList { pub name: String, pub words: Vec, diff --git a/server/src/web.rs b/server/src/web.rs index b20e38b..50bb6c2 100644 --- a/server/src/web.rs +++ b/server/src/web.rs @@ -18,6 +18,7 @@ mod get_mine; mod get_message; mod claim; mod ping; +mod packs; pub fn routes(state: Arc) -> BoxedFilter<(impl Reply, )> { register::register(Arc::clone(&state)) @@ -30,6 +31,7 @@ pub fn routes(state: Arc) -> BoxedFilter<(impl Reply, )> { .or(get_mine::get_mine(Arc::clone(&state))) .or(claim::claim(Arc::clone(&state))) .or(ping::ping(Arc::clone(&state))) + .or(packs::packs(Arc::clone(&state))) .recover(handle_rejection) .boxed() } diff --git a/server/src/web/packs.rs b/server/src/web/packs.rs new file mode 100644 index 0000000..14aca44 --- /dev/null +++ b/server/src/web/packs.rs @@ -0,0 +1,26 @@ +use std::sync::Arc; + +use warp::{Filter, Rejection, Reply}; +use warp::filters::BoxedFilter; + +use crate::{Pack, State}; + +pub fn packs(state: Arc) -> 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) -> Result { + let mut visible: Vec = state.packs.read() + .await + .values() + .filter(|pack| pack.visible) + .map(|pack| pack.clone()) + .collect(); + visible.sort_unstable_by_key(|pack| pack.order); + + Ok(warp::reply::json(&visible)) +}