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 std::ffi::CString;
use libc::{c_char, c_int};
use crate::util::Binding;
use crate::{raw, Buf, Error, IntoCString};
pub fn message_prettify<T: IntoCString>(
message: T,
comment_char: Option<u8>,
) -> Result<String, Error> {
_message_prettify(message.into_c_string()?, comment_char)
}
fn _message_prettify(message: CString, comment_char: Option<u8>) -> Result<String, Error> {
let ret = Buf::new();
unsafe {
try_call!(raw::git_message_prettify(
ret.raw(),
message,
comment_char.is_some() as c_int,
comment_char.unwrap_or(0) as c_char
));
}
Ok(ret.as_str().unwrap().to_string())
}
pub const DEFAULT_COMMENT_CHAR: Option<u8> = Some(b'#');
#[cfg(test)]
mod tests {
use crate::{message_prettify, DEFAULT_COMMENT_CHAR};
#[test]
fn prettify() {
assert_eq!(message_prettify("1\n\n\n2", None).unwrap(), "1\n\n2\n");
assert_eq!(
message_prettify("1\n\n\n2\n\n\n3", None).unwrap(),
"1\n\n2\n\n3\n"
);
assert_eq!(
message_prettify("1\n# comment\n# more", None).unwrap(),
"1\n# comment\n# more\n"
);
assert_eq!(
message_prettify("1\n# comment\n# more", DEFAULT_COMMENT_CHAR).unwrap(),
"1\n"
);
assert_eq!(
message_prettify("1\n; comment\n; more", Some(';' as u8)).unwrap(),
"1\n"
);
}
}