flams_router_content/
lib.rs

1#![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        //v.sort();
21        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}