1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
//! Whisker CNG (Continuous Native Generation).
//!
//! Renders the Android / iOS host projects under `gen/{android,ios}/`
//! from the user's `whisker.rs` (= [`whisker_config::Config`]).
//! Drift between the in-tree files and the current config is detected
//! via a content-hashed fingerprint stored alongside each generated
//! tree (`gen/<platform>/.whisker-fingerprint`).
//!
//! Modelled on Expo's CNG: the source of truth is the declarative
//! config, the platforms directory are build artifacts (never
//! committed). Unlike Expo, regeneration is *implicit* — there's no
//! separate `whisker generate` command. Whichever command needs the
//! native tree (today: `whisker run`) calls
//! [`sync_android`] / [`sync_ios`] first; the fast path (fingerprint
//! match) is a single file read and returns instantly.
//!
//! ## Public entry points
//!
//! - [`sync_android`] / [`sync_ios`] — render-or-skip for one
//! platform. Returns whether files were actually rewritten.
//! - [`AndroidInputs`] / [`IosInputs`] — the renderer's input bundle.
//! Build them yourself for full control, or use
//! [`android::inputs_from`] / [`ios::inputs_from`] for the
//! "extract from Config + defaults" path.
//!
//! The crate has no CLI surface and shells out to nothing —
//! `whisker-cli` is responsible for running `xcodegen`, `gradle`, etc.
//! after a sync completes. Keeping side-effects out of the renderer
//! makes it cheap to unit-test against tempdirs.
pub use ;
pub use ;
pub use ;
pub use ;
pub use Config;