1#![recursion_limit = "256"]
2#![cfg_attr(docsrs, feature(doc_auto_cfg))]
8
9#[cfg(any(
10 all(feature = "ssr", feature = "hydrate", not(doc)),
11 not(any(feature = "ssr", feature = "hydrate"))
12))]
13compile_error!("exactly one of the features \"ssr\" or \"hydrate\" must be enabled");
14
15#[cfg(feature = "ssr")]
16pub mod server;
17
18pub(crate) mod fns {
19 use std::{future::Future, pin::Pin};
20
21 use flams_ontology::{
22 languages::Language,
23 narration::{notations::Notation, LOKind},
24 uris::{ArchiveId, DocumentElementURI, DocumentURI, SymbolURI, URI},
25 };
26 use flams_utils::CSS;
27 use ftml_viewer_components::components::{omdoc::OMDoc, TOCElem};
28 use leptos::prelude::ServerFnError;
29
30 fn fragment(
31 uri: Option<URI>,
32 rp: Option<String>,
33 a: Option<ArchiveId>,
34 p: Option<String>,
35 l: Option<Language>,
36 d: Option<String>,
37 e: Option<String>,
38 m: Option<String>,
39 s: Option<String>,
40 context:Option<URI>
41 ) -> Pin<Box<dyn Future<Output = Result<(URI, Vec<CSS>, String), ServerFnError<String>>> + Send>>
42 {
43 Box::pin(flams_router_dashboard::server_fns::content::fragment(
44 uri, rp, a, p, l, d, e, m, s, context
45 ))
46 }
47 fn full_doc(
48 uri: Option<DocumentURI>,
49 rp: Option<String>,
50 a: Option<ArchiveId>,
51 p: Option<String>,
52 l: Option<Language>,
53 d: Option<String>,
54 ) -> Pin<
55 Box<
56 dyn Future<Output = Result<(DocumentURI, Vec<CSS>, String), ServerFnError<String>>>
57 + Send,
58 >,
59 > {
60 Box::pin(flams_router_dashboard::server_fns::content::document(
61 uri, rp, a, p, l, d,
62 ))
63 }
64 fn toc(
65 uri: Option<DocumentURI>,
66 rp: Option<String>,
67 a: Option<ArchiveId>,
68 p: Option<String>,
69 l: Option<Language>,
70 d: Option<String>,
71 ) -> Pin<Box<dyn Future<Output = Result<(Vec<CSS>, Vec<TOCElem>), ServerFnError<String>>> + Send>>
72 {
73 Box::pin(flams_router_dashboard::server_fns::content::toc(
74 uri, rp, a, p, l, d,
75 ))
76 }
77 fn los(
78 uri: Option<SymbolURI>,
79 a: Option<ArchiveId>,
80 p: Option<String>,
81 m: Option<String>,
82 s: Option<String>,
83 problems: bool,
84 ) -> Pin<
85 Box<
86 dyn Future<Output = Result<Vec<(DocumentElementURI, LOKind)>, ServerFnError<String>>>
87 + Send,
88 >,
89 > {
90 Box::pin(flams_router_dashboard::server_fns::content::los(
91 uri, a, p, m, s, problems,
92 ))
93 }
94 fn omdoc(
95 uri: Option<URI>,
96 rp: Option<String>,
97 a: Option<ArchiveId>,
98 p: Option<String>,
99 l: Option<Language>,
100 d: Option<String>,
101 e: Option<String>,
102 m: Option<String>,
103 s: Option<String>,
104 ) -> Pin<Box<dyn Future<Output = Result<(Vec<CSS>, OMDoc), ServerFnError<String>>> + Send>>
105 {
106 Box::pin(flams_router_dashboard::server_fns::content::omdoc(
107 uri, rp, a, p, l, d, e, m, s,
108 ))
109 }
110 fn notations(
111 uri: Option<URI>,
112 rp: Option<String>,
113 a: Option<ArchiveId>,
114 p: Option<String>,
115 l: Option<Language>,
116 d: Option<String>,
117 e: Option<String>,
118 m: Option<String>,
119 s: Option<String>,
120 ) -> Pin<
121 Box<
122 dyn Future<Output = Result<Vec<(DocumentElementURI, Notation)>, ServerFnError<String>>>
123 + Send,
124 >,
125 > {
126 Box::pin(flams_router_dashboard::server_fns::content::notations(
127 uri, rp, a, p, l, d, e, m, s,
128 ))
129 }
130 fn solutions(
131 uri: Option<URI>,
132 rp: Option<String>,
133 a: Option<ArchiveId>,
134 p: Option<String>,
135 l: Option<Language>,
136 d: Option<String>,
137 e: Option<String>,
138 _m: Option<String>,
139 _s: Option<String>,
140 ) -> Pin<Box<dyn Future<Output = Result<String, ServerFnError<String>>> + Send>> {
141 Box::pin(flams_router_dashboard::server_fns::content::solution(
142 uri, rp, a, p, l, d, e,
143 ))
144 }
145 pub(super) fn init() {
146 ftml_viewer_components::remote::ServerConfig::initialize(
147 fragment, full_doc, toc, omdoc, los, notations, solutions,
148 );
149 }
150}
151
152#[cfg(feature = "hydrate")]
153#[leptos::wasm_bindgen::prelude::wasm_bindgen]
154pub fn hydrate() {
155 console_error_panic_hook::set_once();
156 tracing_wasm::set_as_global_default();
157 fns::init();
158 leptos::mount::hydrate_body(flams_router_dashboard::Main);
159}
160
161#[cfg(any(doc, feature = "docs"))]
162pub mod endpoints;