git_revise/revise/prompts/
commit_breaking.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
use inquire::{
    ui::{Color, RenderConfig, Styled},
    Editor,
};

use super::Inquire;
use crate::error::ReviseResult;

#[derive(Debug, Clone)]
pub struct Part {
    pub msg: String,
    pub ans: Option<String>,
    pub fg: Color,
}

impl Part {
    pub fn new() -> Self {
        Self {
            msg: "List any BREAKING CHANGES (optional):".to_string(),
            ans: None,
            fg: Color::DarkYellow,
        }
    }
}

impl Default for Part {
    fn default() -> Self {
        Self::new()
    }
}

impl Inquire for Part {
    fn inquire(&mut self) -> ReviseResult<()> {
        let ans = Editor::new(&self.msg)
            .with_formatter(&|submission| {
                let char_count = submission.chars().count();
                if char_count == 0 {
                    "<skipped>".to_string()
                } else if char_count <= 20 {
                    submission.into()
                } else {
                    format!("{}...", &submission[..17])
                }
            })
            .with_render_config(
                RenderConfig::default().with_canceled_prompt_indicator(
                    Styled::new("<skipped>").with_fg(self.fg),
                ),
            )
            .prompt()?;

        match &*ans {
            "<skipped>" | "" => {}
            _ => {
                self.ans = Some(ans);
            }
        }

        Ok(())
    }
}