pub mod output;
pub mod patterns;
use crate::error::GivError;
pub use output::{CharResult, CharsOutput};
pub fn convert_input(input: &str) -> Result<CharResult, GivError> {
if let Some((character, name)) = patterns::lookup_pattern(input) {
let result_type = if input.starts_with(':') && input.ends_with(':') {
"emoji"
} else if input.starts_with('&') && input.ends_with(';') {
"html"
} else {
"pattern"
};
return Ok(CharResult {
input: input.to_string(),
output: character.to_string(),
result_type: result_type.to_string(),
name: Some(name.to_string()),
});
}
Err(GivError::UnknownCharacterPattern(input.to_string()))
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_emoji_conversion() {
let result = convert_input(":smile:").unwrap();
assert_eq!(result.output, "π");
assert_eq!(result.result_type, "emoji");
}
#[test]
fn test_html_entity_conversion() {
let result = convert_input(" ").unwrap();
assert_eq!(result.output, "\u{00A0}");
assert_eq!(result.result_type, "html");
}
#[test]
fn test_pattern_conversion() {
let result = convert_input("1/4").unwrap();
assert_eq!(result.output, "ΒΌ");
assert_eq!(result.result_type, "pattern");
}
#[test]
fn test_copyright() {
let result = convert_input("(c)").unwrap();
assert_eq!(result.output, "Β©");
assert_eq!(result.result_type, "pattern");
}
#[test]
fn test_em_dash_alias() {
let result = convert_input("em").unwrap();
assert_eq!(result.output, "β");
assert_eq!(result.result_type, "pattern");
}
#[test]
fn test_arrow_patterns() {
let result = convert_input("->").unwrap();
assert_eq!(result.output, "β");
assert_eq!(result.result_type, "pattern");
}
#[test]
fn test_unknown_pattern_error() {
let result = convert_input("unknown");
assert!(result.is_err());
match result {
Err(GivError::UnknownCharacterPattern(s)) => {
assert_eq!(s, "unknown");
}
_ => panic!("Expected UnknownCharacterPattern error"),
}
}
}