use crate::unicode::decode_unicode;
const CURRENCY: u8 = decode_unicode('⠈');
pub fn encode_symbol(c: char) -> Option<Vec<u8>> {
Some(match c {
'%' => vec![decode_unicode('⠨'), decode_unicode('⠴')], '&' => vec![decode_unicode('⠈'), decode_unicode('⠯')], '*' => vec![decode_unicode('⠐'), decode_unicode('⠔')], '^' => vec![decode_unicode('⠈'), decode_unicode('⠢')], '_' => vec![decode_unicode('⠨'), decode_unicode('⠤')], '〃' => vec![decode_unicode('⠐'), decode_unicode('⠂')], '+' => vec![decode_unicode('⠐'), decode_unicode('⠖')],
'=' => vec![decode_unicode('⠐'), decode_unicode('⠶')],
'\u{2212}' => vec![decode_unicode('⠐'), decode_unicode('⠤')], '<' => vec![decode_unicode('⠈'), decode_unicode('⠣')],
'>' => vec![decode_unicode('⠈'), decode_unicode('⠜')],
'⟨' | '〈' => vec![decode_unicode('⠈'), decode_unicode('⠣')], '⟩' | '〉' => vec![decode_unicode('⠈'), decode_unicode('⠜')], '\u{00F7}' => vec![decode_unicode('⠐'), decode_unicode('⠌')], '\u{00D7}' => vec![decode_unicode('⠐'), decode_unicode('⠦')], '~' => vec![decode_unicode('⠈'), decode_unicode('⠔')], '⎵' => vec![decode_unicode('⠬')], '$' => vec![CURRENCY, decode_unicode('⠎')],
'¢' => vec![CURRENCY, decode_unicode('⠉')],
'€' => vec![CURRENCY, decode_unicode('⠑')],
'£' => vec![CURRENCY, decode_unicode('⠇')],
'¥' => vec![CURRENCY, decode_unicode('⠽')],
'₣' => vec![CURRENCY, decode_unicode('⠋')],
'₦' => vec![CURRENCY, decode_unicode('⠝')],
'\u{266D}' => vec![decode_unicode('⠼'), decode_unicode('⠣')], '\u{266F}' => vec![decode_unicode('⠼'), decode_unicode('⠩')], '\u{266E}' => vec![decode_unicode('⠼'), decode_unicode('⠡')], '\u{2020}' => vec![
decode_unicode('⠈'),
decode_unicode('⠠'),
decode_unicode('⠹'),
], '\u{2021}' => vec![
decode_unicode('⠈'),
decode_unicode('⠠'),
decode_unicode('⠻'),
], '\u{2640}' => vec![decode_unicode('⠘'), decode_unicode('⠭')], '\u{2642}' => vec![decode_unicode('⠘'), decode_unicode('⠽')], '\u{2022}' => vec![decode_unicode('⠸'), decode_unicode('⠲')], '\u{00A9}' => vec![decode_unicode('⠘'), decode_unicode('⠉')], '\u{2122}' => vec![decode_unicode('⠘'), decode_unicode('⠞')], '\u{2713}' => vec![decode_unicode('⠈'), decode_unicode('⠩')], '\u{00B4}' => vec![decode_unicode('⠘'), decode_unicode('⠌')], '\u{0060}' => vec![decode_unicode('⠘'), decode_unicode('⠡')], '\u{21B5}' => vec![
decode_unicode('⠰'),
decode_unicode('⠳'),
decode_unicode('⠲'),
decode_unicode('⠩'),
], '\u{2190}' => vec![
decode_unicode('⠰'),
decode_unicode('⠳'),
decode_unicode('⠪'),
], '\u{2191}' => vec![
decode_unicode('⠰'),
decode_unicode('⠳'),
decode_unicode('⠬'),
], '\u{21D2}' => vec![
decode_unicode('⠰'),
decode_unicode('⠳'),
decode_unicode('⠶'),
decode_unicode('⠶'),
decode_unicode('⠕'),
], '\u{2194}' => vec![
decode_unicode('⠰'),
decode_unicode('⠳'),
decode_unicode('⠺'),
decode_unicode('⠗'),
decode_unicode('⠕'),
], '\u{2295}' => vec![
decode_unicode('⠰'),
decode_unicode('⠫'),
decode_unicode('⠿'),
decode_unicode('⠪'),
decode_unicode('⠐'),
decode_unicode('⠖'),
], '\u{00B0}' => vec![decode_unicode('⠘'), decode_unicode('⠚')], '\u{00B6}' => vec![decode_unicode('⠘'), decode_unicode('⠏')], '\u{00A7}' => vec![decode_unicode('⠘'), decode_unicode('⠎')], '\u{00AE}' => vec![decode_unicode('⠘'), decode_unicode('⠗')], '\u{25A1}' => vec![
decode_unicode('⠰'),
decode_unicode('⠫'),
decode_unicode('⠼'),
decode_unicode('⠙'),
], '\u{270F}' => vec![
decode_unicode('⠈'),
decode_unicode('⠫'),
decode_unicode('⠏'),
decode_unicode('⠑'),
decode_unicode('⠝'),
decode_unicode('⠉'),
decode_unicode('⠊'),
decode_unicode('⠇'),
], '\u{261E}' => vec![
decode_unicode('⠈'),
decode_unicode('⠫'),
decode_unicode('⠏'),
decode_unicode('⠕'),
decode_unicode('⠊'),
decode_unicode('⠝'),
decode_unicode('⠞'),
], '\u{2030}' => vec![decode_unicode('⠹')], '\u{0E3F}' => vec![decode_unicode('⠼'), decode_unicode('⠹')], '\u{2740}' => vec![
decode_unicode('⠈'),
decode_unicode('⠼'),
decode_unicode('⠹'),
], '#' => vec![decode_unicode('⠸'), decode_unicode('⠹')],
_ => return None,
})
}
#[cfg(test)]
mod tests {
use super::*;
#[rstest::rstest]
#[case::percent('%', vec![decode_unicode('⠨'), decode_unicode('⠴')])]
#[case::ampersand('&', vec![decode_unicode('⠈'), decode_unicode('⠯')])]
#[case::asterisk('*', vec![decode_unicode('⠐'), decode_unicode('⠔')])]
#[case::caret('^', vec![decode_unicode('⠈'), decode_unicode('⠢')])]
#[case::underscore('_', vec![decode_unicode('⠨'), decode_unicode('⠤')])]
#[case::plus('+', vec![decode_unicode('⠐'), decode_unicode('⠖')])]
#[case::equals('=', vec![decode_unicode('⠐'), decode_unicode('⠶')])]
#[case::minus('\u{2212}', vec![decode_unicode('⠐'), decode_unicode('⠤')])]
#[case::less_than('<', vec![decode_unicode('⠈'), decode_unicode('⠣')])]
#[case::greater_than('>', vec![decode_unicode('⠈'), decode_unicode('⠜')])]
#[case::division('\u{00F7}', vec![decode_unicode('⠐'), decode_unicode('⠌')])]
#[case::multiplication('\u{00D7}', vec![decode_unicode('⠐'), decode_unicode('⠦')])]
#[case::tilde('~', vec![decode_unicode('⠈'), decode_unicode('⠔')])]
#[case::ditto('〃', vec![decode_unicode('⠐'), decode_unicode('⠂')])]
#[case::dollar('$', vec![decode_unicode('⠈'), decode_unicode('⠎')])]
#[case::cent('¢', vec![decode_unicode('⠈'), decode_unicode('⠉')])]
#[case::euro('€', vec![decode_unicode('⠈'), decode_unicode('⠑')])]
#[case::pound('£', vec![decode_unicode('⠈'), decode_unicode('⠇')])]
#[case::yen('¥', vec![decode_unicode('⠈'), decode_unicode('⠽')])]
#[case::flat('\u{266D}', vec![decode_unicode('⠼'), decode_unicode('⠣')])]
#[case::sharp('\u{266F}', vec![decode_unicode('⠼'), decode_unicode('⠩')])]
#[case::natural('\u{266E}', vec![decode_unicode('⠼'), decode_unicode('⠡')])]
#[case::dagger('\u{2020}', vec![decode_unicode('⠈'), decode_unicode('⠠'), decode_unicode('⠹')])]
#[case::double_dagger('\u{2021}', vec![decode_unicode('⠈'), decode_unicode('⠠'), decode_unicode('⠻')])]
#[case::female('\u{2640}', vec![decode_unicode('⠘'), decode_unicode('⠭')])]
#[case::male('\u{2642}', vec![decode_unicode('⠘'), decode_unicode('⠽')])]
#[case::bullet('\u{2022}', vec![decode_unicode('⠸'), decode_unicode('⠲')])]
#[case::copyright('\u{00A9}', vec![decode_unicode('⠘'), decode_unicode('⠉')])]
#[case::trademark('\u{2122}', vec![decode_unicode('⠘'), decode_unicode('⠞')])]
#[case::check_mark('\u{2713}', vec![decode_unicode('⠈'), decode_unicode('⠩')])]
#[case::acute('\u{00B4}', vec![decode_unicode('⠘'), decode_unicode('⠌')])]
#[case::grave('\u{0060}', vec![decode_unicode('⠘'), decode_unicode('⠡')])]
#[case::return_arrow('\u{21B5}', vec![decode_unicode('⠰'), decode_unicode('⠳'), decode_unicode('⠲'), decode_unicode('⠩')])]
#[case::leftwards_arrow('\u{2190}', vec![decode_unicode('⠰'), decode_unicode('⠳'), decode_unicode('⠪')])]
#[case::upwards_arrow('\u{2191}', vec![decode_unicode('⠰'), decode_unicode('⠳'), decode_unicode('⠬')])]
#[case::rightwards_double_arrow('\u{21D2}', vec![decode_unicode('⠰'), decode_unicode('⠳'), decode_unicode('⠶'), decode_unicode('⠶'), decode_unicode('⠕')])]
#[case::left_right_arrow('\u{2194}', vec![decode_unicode('⠰'), decode_unicode('⠳'), decode_unicode('⠺'), decode_unicode('⠗'), decode_unicode('⠕')])]
#[case::circled_plus('\u{2295}', vec![decode_unicode('⠰'), decode_unicode('⠫'), decode_unicode('⠿'), decode_unicode('⠪'), decode_unicode('⠐'), decode_unicode('⠖')])]
#[case::degree('\u{00B0}', vec![decode_unicode('⠘'), decode_unicode('⠚')])]
#[case::pilcrow('\u{00B6}', vec![decode_unicode('⠘'), decode_unicode('⠏')])]
#[case::section('\u{00A7}', vec![decode_unicode('⠘'), decode_unicode('⠎')])]
#[case::per_mille('\u{2030}', vec![decode_unicode('⠹')])]
#[case::baht('\u{0E3F}', vec![decode_unicode('⠼'), decode_unicode('⠹')])]
#[case::floral('\u{2740}', vec![decode_unicode('⠈'), decode_unicode('⠼'), decode_unicode('⠹')])]
#[case::square('\u{25A1}', vec![decode_unicode('⠰'), decode_unicode('⠫'), decode_unicode('⠼'), decode_unicode('⠙')])]
#[case::pencil('\u{270F}', vec![decode_unicode('⠈'), decode_unicode('⠫'), decode_unicode('⠏'), decode_unicode('⠑'), decode_unicode('⠝'), decode_unicode('⠉'), decode_unicode('⠊'), decode_unicode('⠇')])]
#[case::pointing_hand('\u{261E}', vec![decode_unicode('⠈'), decode_unicode('⠫'), decode_unicode('⠏'), decode_unicode('⠕'), decode_unicode('⠊'), decode_unicode('⠝'), decode_unicode('⠞')])]
#[case::number_sign('#', vec![decode_unicode('⠸'), decode_unicode('⠹')])]
fn encodes_known_symbols(#[case] c: char, #[case] expected: Vec<u8>) {
assert_eq!(encode_symbol(c), Some(expected));
}
#[test]
fn unknown_symbol_returns_none() {
assert_eq!(encode_symbol('@'), None);
}
}