commitfmt 0.0.1

A git commit message formatter
Documentation
use crate::config::Config;
use crate::parser::CommitMessage;
use crate::rules;

pub fn format_commit_message(input: &str, config: &Config) -> String {
    let mut msg = CommitMessage::parse(input);

    rules::enforce_subject_length(&mut msg, config.subject_max_length);
    rules::wrap_body_at_length(&mut msg, config.body_max_line_length);

    msg.to_string()
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_format_basic_message() {
        let config = Config::default();
        let input = "fix: some bug";
        let output = format_commit_message(input, &config);
        assert_eq!(output, "fix: some bug\n");
    }

    #[test]
    fn test_format_with_body() {
        let config = Config::default();
        let input = "fix: some bug.\n\nThis is a very long line that should be wrapped at seventy two characters to follow best practices for commit messages.";
        let output = format_commit_message(input, &config);
        assert!(output.starts_with("fix: some bug"));
        assert!(output.contains("\n\n"));
    }
}