use crate::ffi::utils::*;
use crate::ffi::*;
use crate::settings::locale::Category;
use crate::{Locale, LocaleResult};
#[derive(Debug, Clone, PartialEq)]
pub struct MessageFormat {
pub yes_expression: Option<String>,
pub yes_string: Option<String>,
pub no_expression: Option<String>,
pub no_string: Option<String>,
}
pub fn get_message_format() -> MessageFormat {
MessageFormat {
yes_expression: get_nl_string(YESEXPR),
yes_string: get_nl_string(YESSTR),
no_expression: get_nl_string(NOEXPR),
no_string: get_nl_string(NOSTR),
}
}
pub fn get_message_format_for_locale(
locale: Locale,
inherit_current: bool,
) -> LocaleResult<MessageFormat> {
get_format_for_locale(
Category::Message,
locale,
&get_message_format,
inherit_current,
)
}
#[cfg(test)]
mod tests {
use crate::settings::locale::{set_locale, Category};
use crate::settings::messages::{get_message_format, get_message_format_for_locale};
use crate::Locale;
use std::str::FromStr;
#[test]
fn test_get_message_format() {
if set_locale(&Locale::POSIX, &Category::Message) {
let format = get_message_format();
println!("{:#?}", format);
assert_eq!(format.yes_expression, Some("^[yY]".to_string()));
assert_eq!(format.no_string, Some("no".to_string()));
} else {
panic!("set_locale returned false");
}
}
#[test]
fn test_get_message_format_for_locale() {
if set_locale(&Locale::POSIX, &Category::Message) {
let format = get_message_format_for_locale(Locale::from_str("fr_FR").unwrap(), false);
println!("{:#?}", format);
let format = format.unwrap();
assert_eq!(format.yes_expression, Some("^[oOyY].*".to_string()));
assert_eq!(format.no_string, Some("no".to_string()));
} else {
panic!("set_locale returned false");
}
}
}