use crate::consts::{FAVICON, FAVICON_LINK};
use std::process::Command;
#[derive(Clone)]
pub struct Html {
pub content: String,
}
pub fn process_directory() -> Html {
let mut html: Html = Html::new();
let output = Command::new("git").arg("diff").output();
let result = output.unwrap().stdout;
let stdout_str: String = String::from_utf8(result).unwrap();
if !stdout_str.is_empty() {
html.content = "<div>".to_string();
for line in stdout_str.lines() {
let line_char: Vec<char> = line.chars().collect();
if (line_char[0] == '+' && line.len() >= 2 && line_char[1] != '+')
|| line_char[0] == '+' && line.len() == 1
{
let mut modification = line.to_string();
modification.remove(0); modification.insert(0, ' ');
if modification.is_empty() {
modification.push(' ')
}
html.add_line_green(&modification);
} else if (line_char[0] == '-' && line.len() >= 2 && line_char[1] != '-')
|| line_char[0] == '-' && line.len() == 1
{
let mut modification = line.to_string();
modification.remove(0); modification.insert(0, ' ');
if modification.is_empty() {
modification.push(' ')
}
html.add_line_red(&modification);
} else {
html.add_line(line);
}
}
html.content.push_str("</div>");
return html;
}
html
}
impl Default for Html {
fn default() -> Self {
Self::new()
}
}
impl Html {
pub fn new() -> Self {
Self {
content: String::new(),
}
}
pub fn add_title(&mut self, name: String) {
self.content.push_str("<head>");
self.content.push_str("<title>");
self.content.push_str(&name);
self.content.push_str("</title>");
self.content.push_str(FAVICON);
self.content.push_str(FAVICON_LINK);
self.content.push_str("</head>");
}
fn add_line_green(&mut self, modification: &str) {
self.content.push_str("<p class=\"line-green\">");
self.content.push_str(modification);
self.content.push_str("</p>")
}
fn add_line_red(&mut self, modification: &str) {
self.content.push_str("<p class=\"line-red\">");
self.content.push_str(modification);
self.content.push_str("</p>")
}
fn add_line(&mut self, line: &str) {
self.content.push_str("<p>");
self.content.push_str(line);
self.content.push_str("</p>");
}
}