1use crate::syntax::Comments;
5
6#[derive(Clone, Copy, Debug)]
8pub enum Regenerate<'a> {
9 Command(&'a str),
11 EveryBuild,
13}
14
15#[derive(Clone, Copy, Debug)]
17pub struct Header<'a> {
18 pub tool: &'a str,
20 pub source: &'a str,
22 pub regenerate: Regenerate<'a>,
23}
24
25impl Header<'_> {
26 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 pub fn comment<L: Comments>(&self) -> String {
40 format!("{}\n", L::comment(&self.text()))
41 }
42}