Skip to main content

yog_cli/
lib.rs

1//! The `yog` CLI's internals: `yog.toml` parsing, the generated
2//! `.yog-build/` workspace, `.yres` resources, `content/` blocks and items,
3//! `.yui` screens and `#[yog_export]` crates.
4//!
5//! Not for external use — a library only so the `yog` binary, its tests and
6//! its benches share the code. No API stability, not published separately.
7
8// What the binary, tests and benches reach is documented (the rest is `pub(crate)`).
9#![warn(missing_docs)]
10
11pub(crate) mod audio;
12pub mod bench;
13pub(crate) mod book_page;
14pub mod cargo_toml;
15mod consts;
16pub mod content;
17pub mod design;
18pub mod diagnostics;
19pub mod exports;
20pub mod files;
21pub mod manifest;
22pub mod mappings;
23pub(crate) mod media;
24pub(crate) mod recipe_area;
25pub(crate) mod rust_code;
26pub mod serve;
27pub mod yres;
28pub mod yui;
29pub mod yui_component;
30pub mod yui_grid;
31pub(crate) mod yui_resources;
32pub(crate) mod yui_vm;
33
34/// `path` with `/` between its parts, whatever the system's separator.
35pub fn slash_path(path: &std::path::Path) -> String {
36    path.to_string_lossy().replace('\\', yog_ids::sep::PATH)
37}
38
39/// `path` as a project shows it: relative to its `root`, `/`-separated.
40pub(crate) fn shown_path(root: &std::path::Path, path: &std::path::Path) -> String {
41    slash_path(path.strip_prefix(root).unwrap_or(path))
42}
43
44/// Writes generated `code` to `path` (creating its directory) unless it's
45/// already there — unchanged files keep their mtime, so cargo doesn't
46/// rebuild for nothing.
47pub(crate) fn write_if_changed(
48    path: &std::path::Path,
49    code: impl AsRef<[u8]>,
50) -> Result<(), String> {
51    let code = code.as_ref();
52    if std::fs::read(path).ok().as_deref() == Some(code) {
53        return Ok(());
54    }
55    if let Some(dir) = path.parent() {
56        std::fs::create_dir_all(dir).map_err(|e| format!("{}: {e}", dir.display()))?;
57    }
58    std::fs::write(path, code).map_err(|e| format!("{}: {e}", path.display()))
59}