use crate::syntax::Comments;
#[derive(Clone, Copy, Debug)]
pub enum Regenerate<'a> {
Command(&'a str),
EveryBuild,
}
#[derive(Clone, Copy, Debug)]
pub struct Header<'a> {
pub tool: &'a str,
pub source: &'a str,
pub regenerate: Regenerate<'a>,
}
impl Header<'_> {
pub fn text(&self) -> String {
let again = match self.regenerate {
Regenerate::Command(command) => format!("regenerate with `{command}`"),
Regenerate::EveryBuild => "it's rewritten on every build".to_string(),
};
format!(
"Generated by {} from {} — don't edit; {again}.",
self.tool, self.source
)
}
pub fn comment<L: Comments>(&self) -> String {
format!("{}\n", L::comment(&self.text()))
}
}