flams_router_search/
lib.rs1#![recursion_limit = "256"]
2
3#[cfg(any(
4 all(feature = "ssr", feature = "hydrate", not(feature = "docs-only")),
5 not(any(feature = "ssr", feature = "hydrate"))
6))]
7compile_error!("exactly one of the features \"ssr\" or \"hydrate\" must be enabled");
8
9pub mod components;
10pub mod vscode;
11
12use flams_backend_types::search::{QueryFilter, SearchResult};
13use flams_utils::vecmap::VecMap;
14use ftml_uris::SymbolUri;
15use leptos::prelude::*;
16
17#[server(prefix = "/api", endpoint = "search")]
18#[allow(clippy::unused_async)]
19pub async fn search_query(
20 query: String,
21 opts: QueryFilter,
22 num_results: usize,
23) -> Result<Vec<(f32, SearchResult)>, ServerFnError<String>> {
24 use flams_search::Searcher;
25 tokio::task::spawn_blocking(move || {
26 Searcher::get()
27 .query(&query, opts, num_results)
28 .ok_or_else(|| ServerFnError::ServerError("Search error".to_string()))
29 })
30 .await
31 .map_err(|e| ServerFnError::ServerError(e.to_string()))?
32}
33#[server(prefix = "/api", endpoint = "search_symbols")]
34#[allow(clippy::unused_async)]
35pub async fn search_symbols(
36 query: String,
37 num_results: usize,
38) -> Result<Vec<(SymbolUri, Vec<(f32, SearchResult)>)>, ServerFnError<String>> {
39 use flams_search::Searcher;
40 tokio::task::spawn_blocking(move || {
41 Searcher::get()
42 .query_symbols(&query, num_results)
43 .ok_or_else(|| ServerFnError::ServerError("Search error".to_string()))
44 })
45 .await
46 .map_err(|e| ServerFnError::ServerError(e.to_string()))?
47}