web: refactor code into separate modules

This commit is contained in:
2023-12-02 09:29:50 -08:00
parent cfe1446668
commit 0a7cdefda3
6 changed files with 1350 additions and 1356 deletions

86
web/src/api.rs Normal file
View File

@@ -0,0 +1,86 @@
use log::info;
use notmuch::ThreadSet;
use seed::{prelude::*, Url};
use serde::de::Deserialize;
const BASE_URL: &str = "/api";
pub fn refresh() -> String {
format!("{BASE_URL}/refresh")
}
pub fn search(query: &str, page: usize, results_per_page: usize) -> String {
let query = Url::encode_uri_component(query);
format!("{BASE_URL}/search/{query}?page={page}&results_per_page={results_per_page}")
}
pub fn show(tid: &str) -> String {
format!("{BASE_URL}/show/{tid}")
}
pub fn show_pretty(tid: &str) -> String {
format!("{BASE_URL}/show/{tid}/pretty")
}
pub fn original(message_id: &str) -> String {
format!("{BASE_URL}/original/{message_id}")
}
pub mod urls {
use seed::Url;
pub fn search(query: &str, page: usize) -> Url {
let query = Url::encode_uri_component(query);
if page > 0 {
Url::new().set_hash_path(["s", &query, &format!("p{page}")])
} else {
Url::new().set_hash_path(["s", &query])
}
}
pub fn thread(tid: &str) -> Url {
Url::new().set_hash_path(["t", tid])
}
}
pub async fn search_request(
query: &str,
page: usize,
results_per_page: usize,
) -> fetch::Result<shared::SearchResult> {
Request::new(search(query, page, results_per_page))
.method(Method::Get)
.fetch()
.await?
.check_status()?
.json()
.await
}
pub async fn refresh_request() -> fetch::Result<()> {
let t = Request::new(refresh())
.method(Method::Get)
.fetch()
.await?
.check_status()?
.text()
.await?;
info!("refresh {t}");
Ok(())
}
pub async fn show_request(tid: &str) -> fetch::Result<ThreadSet> {
let b = Request::new(show(tid))
.method(Method::Get)
.fetch()
.await?
.check_status()?
.bytes()
.await?;
let mut deserializer = serde_json::Deserializer::from_slice(&b);
deserializer.disable_recursion_limit();
Ok(ThreadSet::deserialize(&mut deserializer)
.map_err(|_| FetchError::JsonError(fetch::JsonError::Serde(JsValue::NULL)))?)
}
pub async fn show_pretty_request(tid: &str) -> fetch::Result<ThreadSet> {
Request::new(show_pretty(tid))
.method(Method::Get)
.fetch()
.await?
.check_status()?
.json()
.await
}