1use crate::{
2 config::Config,
3 git::{parse_commit_message, parse_subject},
4 result::Result as LintResult,
5};
6use std::{collections::HashMap, fmt::Error};
7
8#[derive(Clone, Debug)]
20pub struct Message {
21 pub body: Option<String>,
23
24 pub description: Option<String>,
26 pub footers: Option<HashMap<String, String>>,
28
29 #[allow(dead_code)]
30 pub raw: String,
32
33 pub r#type: Option<String>,
35
36 pub scope: Option<String>,
38
39 pub subject: Option<String>,
41}
42
43impl Message {
45 pub fn new(raw: String) -> Self {
47 let (subject, body, footers) = parse_commit_message(&raw);
48 let (r#type, scope, description) = parse_subject(&subject);
49 Self {
50 body,
51 description,
52 footers,
53 raw,
54 r#type,
55 scope,
56 subject: Some(subject),
57 }
58 }
59}
60
61pub async fn validate(msg: &Message, config: &Config) -> Result<LintResult, Error> {
63 let violations = config.rules.validate(msg);
64 Ok(LintResult { violations })
65}