flams_router_content/
lib.rs1#![recursion_limit = "256"]
2#![cfg_attr(docsrs, feature(doc_auto_cfg))]
3
4#[cfg(any(
5 all(feature = "ssr", feature = "hydrate", not(feature = "docs-only")),
6 not(any(feature = "ssr", feature = "hydrate"))
7))]
8compile_error!("exactly one of the features \"ssr\" or \"hydrate\" must be enabled");
9
10pub mod components;
11pub mod server_fns;
12#[cfg(feature = "ssr")]
13mod toc;
14
15#[cfg(feature = "ssr")]
16mod ssr {
17 use flams_utils::CSS;
18
19 pub(crate) fn insert_base_url(mut v: Vec<CSS>) -> Vec<CSS> {
20 for c in v.iter_mut() {
22 if let CSS::Link(lnk) = c {
23 if let Some(r) = lnk.strip_prefix("srv:") {
24 *lnk = format!(
25 "{}{r}",
26 flams_system::settings::Settings::get()
27 .external_url()
28 .unwrap_or("")
29 )
30 .into_boxed_str()
31 }
32 }
33 }
34 v
35 }
36
37 macro_rules! backend {
38 ($fn:ident!($($args:tt)*)) => {
39 if flams_system::settings::Settings::get().lsp {
40 let Some(state) = ::flams_lsp::STDIOLSPServer::global_state() else {
41 return Err("no lsp server".to_string().into())
42 };
43 state.backend().$fn($($args)*)
44 } else {
45 ::paste::paste!{
46 flams_system::backend::GlobalBackend::get().[<$fn _async>]($($args)*).await
47 }
48 }
49 };
50 ($fn:ident SYNC!($($args:tt)*)) => {
51 if flams_system::settings::Settings::get().lsp {
52 let Some(state) = ::flams_lsp::STDIOLSPServer::global_state() else {
53 return Err("no lsp server".to_string())
54 };
55 state.backend().$fn($($args)*)
56 } else {
57 flams_system::backend::GlobalBackend::get().$fn($($args)*)
58 }
59 };
60 ($fn:ident($($args:tt)*)) => {
61 if flams_system::settings::Settings::get().lsp {
62 let Some(state) = ::flams_lsp::STDIOLSPServer::global_state() else {
63 return Err("no lsp server".to_string())
64 };
65 state.backend().$fn($($args)*)
66 } else {
67 flams_system::backend::GlobalBackend::get().$fn($($args)*)
68 }
69 };
70 (! $fn:ident($($args:tt)*)) => {
71 if flams_system::settings::Settings::get().lsp {
72 let state = ::flams_utils::unwrap!(::flams_lsp::STDIOLSPServer::global_state());
73 state.backend().$fn($($args)*)
74 } else {
75 flams_system::backend::GlobalBackend::get().$fn($($args)*)
76 }
77 };
78 ($b:ident => {$($lsp:tt)*}{$($global:tt)*}) => {
79 if flams_system::settings::Settings::get().lsp {
80 let Some(state) = ::flams_lsp::STDIOLSPServer::global_state() else {
81 return Err("no lsp server".to_string().into())
82 };
83 let $b = state.backend();
84 $($lsp)*
85 } else {
86 let $b = flams_system::backend::GlobalBackend::get();
87 $($global)*
88 }
89 };
90 }
91
92 pub(crate) use backend;
93}