use std::fmt::{Display, Write as _};
pub struct PromptBuilder {
buffer: String,
}
impl Default for PromptBuilder {
fn default() -> Self {
Self::new()
}
}
impl PromptBuilder {
pub fn new() -> Self {
Self {
buffer: String::new(),
}
}
pub fn add_section_h1(mut self, line: impl Display) -> Self {
writeln!(self.buffer, "# {line}").expect("failed to write buffer");
self
}
pub fn add_section_h2(mut self, line: impl Display) -> Self {
writeln!(self.buffer, "## {line}").expect("failed to write buffer");
self
}
pub fn add_line(mut self, line: impl Display) -> Self {
writeln!(self.buffer, "{line}").expect("failed to write buffer");
self
}
pub fn add_line_bold(mut self, line: impl Display) -> Self {
writeln!(self.buffer, "**{line}**").expect("failed to write buffer");
self
}
pub fn add_key_value(mut self, key: impl Display, value: impl Display) -> Self {
writeln!(self.buffer, "**{key}**: {value}").expect("failed to write buffer");
self
}
pub fn add_text_markdown(self, content: impl Display) -> Self {
self.add_line("```markdown")
.add_line(content)
.add_line("```")
}
pub fn add_text_json(self, content: impl Display) -> Self {
self.add_line("```json").add_line(content).add_line("```")
}
#[allow(dead_code)]
pub fn add_text_yaml(self, content: impl Display) -> Self {
self.add_line("```yaml").add_line(content).add_line("```")
}
pub fn add_blank_line(mut self) -> Self {
self.buffer.push('\n');
self
}
pub fn add_delimiter(self) -> Self {
self.add_line("---")
}
#[allow(dead_code)]
pub fn indent(mut self) -> Self {
self.buffer.push('\t');
self
}
pub fn finalize(self) -> String {
self.buffer
}
}