flams/
lib.rs

1#![recursion_limit = "256"]
2//#![feature(let_chains)]
3/*! Foo Bar
4 *
5 * See [endpoints] for public API endpoints
6*/
7#![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;