flams_router_search/
lib.rs1#![recursion_limit = "256"]
2
3pub mod components;
4pub mod vscode;
5
6use flams_backend_types::search::{FragmentQueryFilter, SearchResult};
7use ftml_uris::DocumentElementUri;
8use ftml_uris::SymbolUri;
9use leptos::prelude::*;
10
11#[server(prefix = "/api", endpoint = "search")]
12#[allow(clippy::unused_async)]
13pub async fn search_query(
14 query: String,
15 opts: FragmentQueryFilter,
16 num_results: usize,
17) -> Result<Vec<(f32, SearchResult)>, ServerFnError<String>> {
18 use flams_math_archives::backend::LocalBackend;
19 use flams_search::Searcher;
20 tokio::task::spawn_blocking(move || {
21 let mut opts = opts;
23 opts.close(|u| flams_system::backend::backend().get_document(u).ok());
24 Searcher::get()
25 .query(&query, opts, num_results)
26 .map_err(|e| ServerFnError::ServerError(format!("Search error: {e}")))
27 })
28 .await
29 .map_err(|e| ServerFnError::ServerError(e.to_string()))?
30}
31
32#[server(prefix = "/api", endpoint = "search_symbols")]
33#[allow(clippy::unused_async)]
34pub async fn search_symbols(
35 query: String,
36 num_results: usize,
37) -> Result<Vec<(f32, SymbolUri, DocumentElementUri)>, ServerFnError<String>> {
38 use flams_search::Searcher;
39 tokio::task::spawn_blocking(move || {
40 Searcher::get()
41 .query_symbols(&query, num_results)
42 .unwrap_or_default()
43 })
44 .await
45 .map_err(|e| ServerFnError::ServerError(e.to_string()))
46}