Skip to main content

cranpose_services/
lib.rs

1//! Multiplatform service abstractions used by Cranpose applications.
2
3#![deny(unsafe_code)]
4
5#[cfg(test)]
6use cranpose_core::{location_key, Composition, MemoryApplier};
7
8pub mod file_picker;
9pub mod http;
10pub mod theme;
11pub mod uri_handler;
12
13pub use file_picker::{
14    clear_platform_file_picker, default_file_picker, local_file_picker, set_platform_file_picker,
15    FileFilter, FilePicker, FilePickerError, FilePickerOptions, FilePickerRef, FolderStream,
16    FolderStreamRef, PickedEntry, PickedEntryRef, PickedKind, PickerFuture, ProvideFilePicker,
17};
18pub use http::{
19    default_http_client, local_http_client, map_ordered_concurrent, HttpClient, HttpClientRef,
20    HttpError, HttpFuture,
21};
22pub use theme::{
23    default_system_theme, isSystemInDarkTheme, local_system_theme, ProvideSystemTheme, SystemTheme,
24};
25pub use uri_handler::{
26    default_uri_handler, local_uri_handler, ProvideUriHandler, UriHandler, UriHandlerError,
27    UriHandlerRef,
28};
29
30/// Convenience alias used in unit tests.
31#[cfg(test)]
32pub(crate) type TestComposition = Composition<MemoryApplier>;
33
34/// Build a composition with a simple in-memory applier and run the provided closure once.
35#[cfg(test)]
36pub(crate) fn run_test_composition(build: impl FnMut()) -> TestComposition {
37    let mut composition = Composition::new(MemoryApplier::new());
38    composition
39        .render(location_key(file!(), line!(), column!()), build)
40        .expect("initial render succeeds");
41    composition
42}