corundum_framework/lib.rs
1//! `corundum-framework` — a single-dependency facade over the crates the sapphire apps and
2//! asteria share.
3//!
4//! Depend on this one crate and turn on the features you need; each feature re-exports a
5//! `corundum-framework-*` crate as a module, the same way sapphire-framework's facade does.
6//! The default is the part without egui, for the crates without a window (a server, a CLI);
7//! an app turns on `gui`.
8//!
9//! ```toml
10//! # A desktop app:
11//! corundum-framework = { version = "0.1", features = ["eframe", "serde"] }
12//! # The same app on an Android phone:
13//! corundum-framework = { version = "0.1", features = ["android", "serde"] }
14//! ```
15//!
16//! ## Modules (feature-gated)
17//!
18//! | feature | module | crate |
19//! |---|---|---|
20//! | `platform` (default) | [`platform`] | `corundum-framework-platform`: the app's directories, the system's languages, the JNI / Objective-C bridging |
21//! | `gui` | [`gui`] | `corundum-framework-gui`: the shell, theme, fonts, icons and translations (brings `platform`) |
22//! | `update` | [`update`] | `corundum-framework-update`: finding newer GitHub releases of an app's binary, and replacing it with one |
23//! | `self-update` | `update` | `update` with the download and the replacement; a store build leaves it off, as the store updates the app |
24//! | `package` | [`package`] | `corundum-framework-package`: the app as a Velopack package on the desktops: its start and install hooks, its updates, its command line on `PATH` and the Windows console shim (brings `platform`) |
25//! | `gui-update` | `gui::update` | the gui crate's `update` panel: the Settings → About rows that look for a newer release (brings `gui` and `update`) |
26//! | `gui-self-update` | `gui::update` | the panel also downloads the release and replaces the running binary (brings `gui-update` and `self-update`) |
27//! | `gui-package` | `gui::update` | the panel's row for the app's own Velopack package, `Target::Package` (brings `gui-update` and `package`) |
28//! | `eframe` | `gui::window::run`, [`eframe`] | `corundum-framework-gui` with its `eframe` feature: a desktop window started the same way for every app |
29//! | `android` | `gui::window::run_android`, [`eframe`] | `corundum-framework-gui` with its `android` feature: the window on an Android phone (brings `eframe`) |
30//! | `media-session` | `platform::media_session`, `gui::media_session` | the OS's media keys and its "now playing", for a music player; `gui::media_session::start` makes one for an eframe window (brings `platform`). An iOS app adds `UIBackgroundModes` `audio` to its Info.plist |
31//! | `single-instance` | `platform::instance`, `gui::window::WindowOptions::single_instance` | a desktop app run once: a second start brings the first's window to the front and exits (brings `platform`) |
32//! | `serde` | `gui::look`, `gui::store` | `Serialize` / `Deserialize` on the gui's theme and language settings, and `store`: the look in effect and the rail's order, kept on the device in a TOML file and put back before the first frame |
33
34#[cfg(feature = "platform")]
35pub use corundum_framework_platform as platform;
36
37#[cfg(feature = "gui")]
38pub use corundum_framework_gui as gui;
39
40#[cfg(feature = "update")]
41pub use corundum_framework_update as update;
42
43#[cfg(feature = "package")]
44pub use corundum_framework_package as package;
45
46// The egui the components are built against, at the top as well: an app that depends on
47// this facade alone renders with this one.
48#[cfg(feature = "gui")]
49pub use corundum_framework_gui::egui;
50
51// The eframe the window runs on, for the app's `eframe::App`; `android` brings `eframe`.
52#[cfg(feature = "eframe")]
53pub use corundum_framework_gui::eframe;