Skip to main content

yog_codegen/
header.rs

1//! What every generated file opens with: who wrote it, from what, and
2//! how it's written again.
3
4use crate::syntax::Comments;
5
6/// How a generated file is written again.
7#[derive(Clone, Copy, Debug)]
8pub enum Regenerate<'a> {
9    /// By running this command.
10    Command(&'a str),
11    /// By every build, on its own.
12    EveryBuild,
13}
14
15/// A generated file's header.
16#[derive(Clone, Copy, Debug)]
17pub struct Header<'a> {
18    /// The generator (`yog-ids`, `` `yog build` ``).
19    pub tool: &'a str,
20    /// What it generates from (`Yog-Mod-Loader/rust/crates/yog-ids`, `content/**`).
21    pub source: &'a str,
22    pub regenerate: Regenerate<'a>,
23}
24
25impl Header<'_> {
26    /// The header's text.
27    pub fn text(&self) -> String {
28        let again = match self.regenerate {
29            Regenerate::Command(command) => format!("regenerate with `{command}`"),
30            Regenerate::EveryBuild => "it's rewritten on every build".to_string(),
31        };
32        format!(
33            "Generated by {} from {} — don't edit; {again}.",
34            self.tool, self.source
35        )
36    }
37
38    /// The header as a comment of language `L`, on a line of its own.
39    pub fn comment<L: Comments>(&self) -> String {
40        format!("{}\n", L::comment(&self.text()))
41    }
42}