1#[cfg(test)]
4use cranpose_core::{Composition, MemoryApplier, location_key};
5
6pub mod app_info;
7pub mod app_update;
8pub mod async_io;
9pub mod audio;
10pub mod background;
11pub mod bundled_assets;
12pub mod camera;
13pub mod content;
14pub mod device_info;
15pub mod file_picker;
16#[cfg(not(target_arch = "wasm32"))]
17pub mod github_release_updater;
18pub mod haptics;
19pub mod host;
20pub mod host_surface;
21pub mod http;
22pub mod image_picker;
23pub mod incoming_share;
24pub mod launch_args;
25pub mod launcher;
26pub mod media;
27pub mod memory_pressure;
28pub mod navigation;
29pub mod network_status;
30pub mod notifier;
31#[cfg(not(target_arch = "wasm32"))]
32pub mod peer;
33pub mod power;
34pub mod preferences;
35pub mod purchases;
36mod registry;
37pub mod share_sheet;
38pub mod theme;
39pub mod uri_handler;
40pub mod writable_folder;
41
42pub use app_info::{
43 AppInfo, AppInfoRef, app_info, build_version, clear_platform_app_info, set_platform_app_info,
44 version_name,
45};
46pub use app_update::{
47 AppUpdateCapabilities, AppUpdateError, AppUpdateObserver, AppUpdateStatus, AppUpdater,
48 AppUpdaterRef, DigestAlgorithm, DigestVerifier, GitHubReleaseUpdate, PackageDigest,
49 UpdatePackage, app_update_capabilities, app_update_checks_supported, app_update_status,
50 app_updates_supported, check_for_app_update, clear_platform_app_updater, install_app_update,
51 observe_app_update_status, set_app_update_status, set_platform_app_updater, sha256_hex,
52 verify_package,
53};
54pub use async_io::{ChunkChannel, ChunkNext, ChunkStream, MAX_PENDING_CHUNKS, Signal, SignalWait};
55pub use audio::{
56 AudioBus, AudioClip, AudioError, AudioPlayer, AudioPlayerRef, NoopAudioPlayer, PlaybackParams,
57 ProvideAudio, SoundBank, SoundBankEntry, SoundBankFailure, SoundId, SoundSpec, VoiceId,
58 clear_platform_audio, default_audio, local_audio, rememberSoundBank, set_platform_audio,
59};
60pub use background::{
61 BackgroundActivity, BackgroundActivityRef, BackgroundWorkLease, acquire_background_work,
62 background_active, background_activity, clear_platform_background_activity,
63 set_platform_background_activity,
64};
65#[cfg(not(target_arch = "wasm32"))]
66pub use bundled_assets::{
67 BundledAssetEntry, BundledAssetInstallOutcome, BundledAssetInstallSpec,
68 install_bundled_asset_set,
69};
70pub use bundled_assets::{
71 BundledAssetError, BundledAssetReader, BundledAssets, BundledAssetsRef, StreamingAssetReader,
72 bundled_assets, clear_platform_bundled_assets, set_platform_bundled_assets,
73};
74pub use camera::{
75 Camera, CameraError, CameraFrame, CameraLens, CameraLenses, CameraObserver, CameraRef,
76 CameraState, CameraStill, FlashMode, FrameFormat, LensFacing, UprightRgba, camera,
77 camera_lenses, camera_state, camera_supported, capture_camera_still, clear_platform_camera,
78 dropped_camera_frames, latest_camera_frame, observe_camera_frames, observe_camera_lenses,
79 observe_camera_state, observe_camera_stills, publish_camera_frame, publish_camera_lenses,
80 publish_camera_state, publish_camera_still, record_dropped_camera_frame, rememberCameraFrames,
81 rememberCameraLenses, rememberCameraState, rememberCameraStills, request_camera_still,
82 set_platform_camera, start_camera, stop_camera,
83};
84pub use content::{
85 BytesContent, Content, ContentChannel, ContentEntry, ContentError, ContentFolder,
86 ContentFolderRef, ContentFuture, ContentHandle, ContentMetadata, ContentReader,
87 ContentReaderRef, ContentResolver, ContentResolverRef, ContentSink, ContentSinkRef,
88 ContentStream, ContentStreamRef, DEFAULT_CHUNK_LEN, ReadyFolder,
89 clear_platform_content_resolver, collect_stream, drain_reader, folder_files, percent_decode,
90 percent_decode_lossy, resolve_content, set_platform_content_resolver, write_all,
91};
92#[cfg(not(target_arch = "wasm32"))]
93pub use content::{FileContent, FileFolder, FileSink, file_content, file_folder};
94pub use device_info::{
95 DeviceInfo, DeviceInfoRef, clear_platform_device_info, device_info, release_free_memory,
96 set_platform_device_info,
97};
98pub use file_picker::{
99 FileFilter, FilePicker, FilePickerError, FilePickerOptions, FilePickerRef, PickerFuture,
100 ProvideFilePicker, RecoveredPick, SaveDocumentRequest, clear_platform_file_picker,
101 default_file_picker, local_file_picker, set_platform_file_picker,
102};
103#[cfg(not(target_arch = "wasm32"))]
104pub use github_release_updater::GitHubAppUpdater;
105pub use haptics::{
106 HapticEffect, HapticError, HapticFeedback, HapticPattern, Haptics, HapticsRef, ProvideHaptics,
107 clear_platform_haptics, default_haptics, local_haptics, set_platform_haptics,
108};
109pub use host::{
110 DEFAULT_DURABLE_SAVE_DEADLINE, DurableSaveEffect, DurableSaveOutcome, DurableSaveRegistration,
111 HostController, HostControllerRef, LifecycleEvent, LifecycleObserver, LifecycleState,
112 PlatformDirectories, PlatformDirectoryError, ProvideLifecycle, application_directories,
113 application_id, background_app, clear_application_id, clear_host_controller,
114 current_lifecycle_state, dispatch_lifecycle, dispatch_lifecycle_state, exit_app,
115 host_controller, local_lifecycle_state, observe_lifecycle, register_durable_save,
116 rememberLifecycleEvents, rememberLifecycleState, set_application_id, set_host_controller,
117 set_keep_screen_on,
118};
119#[cfg(not(target_arch = "wasm32"))]
120pub use host::{durable_save_deadline, run_durable_saves};
121pub use host_surface::{
122 HostSurface, HostSurfaceObserver, HostSurfaceRef, HostSurfaceSize, ResizeRefused,
123 clear_platform_host_surface, host_surface, host_surface_size, observe_host_surface_size,
124 publish_host_surface_size, rememberHostSurfaceSize, request_host_surface_size,
125 set_platform_host_surface,
126};
127pub use http::{
128 BytesBody, HttpBody, HttpBodyRef, HttpClient, HttpClientRef, HttpControl, HttpError,
129 HttpFuture, HttpMethod, HttpProgress, HttpRequest, HttpResponse, ProgressHandler, StubAnswer,
130 StubHttpClient, default_http_client, http_body_ref, local_http_client, map_ordered_concurrent,
131};
132pub use image_picker::{
133 IMAGE_EXTENSIONS, ImagePicker, ImagePickerError, ImagePickerRef, ImageSource,
134 ProvideImagePicker, clear_platform_image_picker, default_image_picker, local_image_picker,
135 set_platform_image_picker,
136};
137pub use incoming_share::{
138 IncomingContent, IncomingContentObserver, IncomingSource, clear_incoming_content,
139 observe_incoming_content, publish_incoming_content, rememberIncomingContent,
140};
141pub use launch_args::{
142 LaunchArgValue, LaunchArgs, LaunchArgsRef, ProvideLaunchArgs, clear_platform_launch_args,
143 is_debuggable, isDebuggable, launch_args, launch_args_from_command_line, local_launch_args,
144 set_platform_launch_args,
145};
146pub use launcher::{
147 LauncherResult, OpenFileLauncher, OpenFilesLauncher, OpenFolderLauncher, SaveDocumentLauncher,
148 WritableFolderLauncher, clear_launcher_state, rememberOpenFileLauncher,
149 rememberOpenFilesLauncher, rememberOpenFolderLauncher, rememberSaveDocumentLauncher,
150 rememberWritableFolderLauncher,
151};
152pub use media::{
153 AudioFocus, DUCKED_GAIN, EqualizerBand, EqualizerSettings, MediaArtwork, MediaCapabilities,
154 MediaCommand, MediaError, MediaItem, MediaMetadata, MediaObserver, MediaPlayer, MediaPlayerRef,
155 MediaSamples, MediaSourceHandle, MediaSourceOpener, MediaSourceOpenerRef,
156 OCTAVE_BAND_CENTERS_HZ, PlaybackProgress, PlaybackState, audio_focus,
157 clear_platform_media_player, clear_platform_media_source_opener, current_media_item,
158 dropped_media_samples, latest_media_samples, media_capabilities, media_equalizer,
159 media_equalizer_bands, media_playback_supported, media_player, media_volume,
160 observe_audio_focus, observe_media_commands, observe_media_samples, observe_playback_progress,
161 observe_playback_state, octave_equalizer_bands, open_media, open_media_source, path_from_uri,
162 pause_media, play_media, playback_progress, playback_state, probe_media_duration,
163 publish_audio_focus, publish_media_command, publish_media_samples, publish_playback_progress,
164 publish_playback_state, record_dropped_media_samples, rememberAudioFocus,
165 rememberMediaCommands, rememberMediaSamples, rememberPlaybackProgress, rememberPlaybackState,
166 seek_media, seek_media_fraction, set_media_analysis_enabled, set_media_equalizer,
167 set_media_looping, set_media_metadata, set_media_speed, set_media_volume,
168 set_platform_media_player, set_platform_media_source_opener, stop_media, toggle_media,
169 uri_for_path,
170};
171pub use memory_pressure::{
172 MemoryPressure, MemoryPressureObserver, observe_memory_pressure, publish_memory_pressure,
173 rememberMemoryPressure,
174};
175pub use navigation::{
176 BackRequestObserver, back_interception_enabled, exit_requested, observe_back_requests,
177 push_back_request, request_exit, set_back_interception, take_back_requests, take_exit_request,
178};
179pub use network_status::{
180 NetworkMonitor, NetworkMonitorRef, NetworkStatus, clear_platform_network_monitor,
181 network_monitor, network_status, set_platform_network_monitor,
182};
183pub use notifier::{
184 Notifier, NotifierRef, NotifyRequest, ProvideNotifier, clear_platform_notifier,
185 default_notifier, local_notifier, push_notification_deeplink, set_platform_notifier,
186 take_notification_deeplink,
187};
188#[cfg(not(target_arch = "wasm32"))]
189pub use peer::{
190 ByteSource, BytesSource, FetchResult, PeerError, PeerServer, SourceResolver, content_length,
191 fetch_range, fetch_to_writer,
192};
193pub use power::{
194 BatteryStatus, PowerCapabilities, PowerMonitor, PowerMonitorRef, PowerObserverRegistration,
195 PowerReading, PowerState, ThermalState, clear_platform_power_monitor, observe_power_state,
196 power_capabilities, power_monitor, power_state, publish_power_state, rememberPowerState,
197 set_platform_power_monitor,
198};
199#[cfg(all(target_arch = "wasm32", feature = "preferences-web"))]
200pub use preferences::BrowserPreferences;
201#[cfg(not(target_arch = "wasm32"))]
202pub use preferences::FilePreferences;
203pub use preferences::{
204 MemoryPreferences, PreferencesError, PreferencesRef, PreferencesStore, Saver,
205 clear_platform_preferences, preferences, rememberSaveable, set_platform_preferences,
206};
207pub use purchases::{
208 Product, PurchaseEvent, Purchases, PurchasesRef, StoreObserver, StorePhase, StoreState,
209 clear_platform_purchases, note_store_news, observe_store_news, purchases,
210 rememberPurchaseEvents, rememberStoreState, set_platform_purchases, store_available,
211 store_state,
212};
213pub use share_sheet::{
214 ProvideShareSheet, ShareContent, ShareError, ShareSheet, ShareSheetRef,
215 clear_platform_share_sheet, default_share_sheet, local_share_sheet, set_platform_share_sheet,
216};
217pub use theme::{
218 ProvideSystemTheme, SystemTheme, clear_platform_system_theme, default_system_theme,
219 isSystemInDarkTheme, local_system_theme, set_platform_system_theme,
220};
221pub use uri_handler::{
222 ProvideUriHandler, UriHandler, UriHandlerError, UriHandlerRef, clear_platform_uri_handler,
223 default_uri_handler, local_uri_handler, set_platform_uri_handler,
224};
225pub use writable_folder::{
226 FolderEntry, FolderError, FolderReader, FolderWriter, WritableFolderStore,
227 WritableFolderStoreRef, open_writable_folder, set_writable_folder_store_factory,
228};
229
230#[cfg(test)]
231pub(crate) type TestComposition = Composition<MemoryApplier>;
232
233#[cfg(test)]
234pub(crate) fn test_scratch_dir(tag: &str) -> std::path::PathBuf {
235 cranpose_core::test_scratch_dir(env!("CARGO_MANIFEST_DIR"), tag)
236}
237
238#[cfg(test)]
239pub(crate) fn run_test_composition(build: impl FnMut()) -> TestComposition {
240 let mut composition = Composition::new(MemoryApplier::new());
241 composition
242 .render(location_key(file!(), line!(), column!()), build)
243 .expect("initial render succeeds");
244 composition
245}