Your browser sucks, JavaScript disabled! Gunnar's console needs JavaScript and WebAssembly. Git over SSH on port 2222 does not.

nordisk/korp-collectors

crates/korp-collectors-build-thing/src/emit.rs

//! **korp-collectors's half of the emitter** — `code → toml`, one-directional.
//!
//! The WRITER is `nornir_build_thing::emit` (one writer for every repo's recipe
//! crate, lane AG 2026-08-30); what lives here is this repo's own
//! [`EMITTED_HEADER`] and the three calls. The committed
//! `.nornir/build-variants.toml` is [`emitted_toml`]'s output and nothing else:
//! an edit to it has ZERO effect on what the recipe declares
//! (`tests/toml_parity.rs` measures that), and the only way to change the
//! description is to change the code and re-emit.

use std::path::{Path, PathBuf};

use anyhow::Result;
use nornir_build_thing::emit;
use nornir_build_thing::plugin::BuildThing;

use crate::recipe::KorpCollectorsBuildThing;

/// The header every emission starts with — says what the file is, and what it
/// is not.
pub const EMITTED_HEADER: &str = "\
# korp-collectors — .nornir/build-variants.toml — EMITTED, NOT SOURCE.
#
# Generated by `cargo run -p korp-collectors-build-thing -- emit` from
# crates/korp-collectors-build-thing (the Rust `impl BuildThing`). The code is
# the one source; this file DESCRIBES the build. Editing it changes NOTHING:
# re-emit after changing the code. Do not edit by hand.
#
# Model: variant → features → settings/sub-settings → typ. ONE package, ONE
# shipped `[[bin]]` (korp-collectors, the unified collector driver) and its
# library; the rows differ only in which collector surfaces are compiled in.
# The interesting half of this recipe is the FEATURE AXIS: fifteen features, four
# built, eleven excused BY NAME in [build.allow_unbuilt] — a feature nothing
# builds and nothing excuses is rot (korp's spark41 collected three invisible
# compile breaks that way). See .nornir/build-thing-design.md.";

/// The emission — what `.nornir/build-variants.toml` must contain.
pub fn emitted_toml() -> Result<String> {
    emit::emitted_toml(EMITTED_HEADER, &KorpCollectorsBuildThing)
}

/// Regenerate `<repo_root>/.nornir/build-variants.toml` from the code.
pub fn write_emitted(repo_root: &Path) -> Result<PathBuf> {
    emit::write_emitted(EMITTED_HEADER, &KorpCollectorsBuildThing, repo_root)
}

/// The repo root, from this crate's manifest directory.
#[must_use]
pub fn repo_root() -> PathBuf {
    Path::new(env!("CARGO_MANIFEST_DIR"))
        .parent()
        .and_then(Path::parent)
        .expect("crates/korp-collectors-build-thing has 2 ancestor(s)")
        .to_path_buf()
}

/// The set this recipe declares.
#[must_use]
pub fn declared() -> nornir_build_thing::variant::BuildVariantSet {
    KorpCollectorsBuildThing.variants()
}