git_iris/commit/
types.rs

1use schemars::JsonSchema;
2use serde::{Deserialize, Serialize};
3use textwrap::wrap;
4
5/// Model for commit message generation results
6#[derive(Serialize, Deserialize, JsonSchema, Debug, Clone)]
7pub struct GeneratedMessage {
8    /// Optional emoji for the commit message
9    pub emoji: Option<String>,
10    /// Commit message title/subject line
11    pub title: String,
12    /// Detailed commit message body
13    pub message: String,
14}
15
16/// Formats a commit message from a `GeneratedMessage`
17pub fn format_commit_message(response: &GeneratedMessage) -> String {
18    let mut message = String::new();
19
20    if let Some(emoji) = &response.emoji {
21        message.push_str(&format!("{emoji} "));
22    }
23
24    message.push_str(&response.title);
25    message.push_str("\n\n");
26
27    let wrapped_message = wrap(&response.message, 78);
28    for line in wrapped_message {
29        message.push_str(&line);
30        message.push('\n');
31    }
32
33    message
34}