use crate::{
config::Config,
git::{parse_commit_message, parse_subject},
result::Result as LintResult,
};
use std::{collections::HashMap, fmt::Error};
#[derive(Clone, Debug)]
pub struct Message {
pub body: Option<String>,
pub description: Option<String>,
pub footers: Option<HashMap<String, String>>,
#[allow(dead_code)]
pub raw: String,
pub r#type: Option<String>,
pub scope: Option<String>,
pub subject: Option<String>,
}
impl Message {
pub fn new(raw: String) -> Self {
let (subject, body, footers) = parse_commit_message(&raw);
let (r#type, scope, description) = parse_subject(&subject);
Self {
body,
description,
footers,
raw,
r#type,
scope,
subject: Some(subject),
}
}
}
pub async fn validate(msg: &Message, config: &Config) -> Result<LintResult, Error> {
let violations = config.rules.validate(msg);
Ok(LintResult { violations })
}