link_cli/sequences/
string_to_unicode_sequence_converter.rs1use crate::link_storage::LinkStorage;
2use crate::sequences::{BalancedVariantConverter, CharToUnicodeSymbolConverter};
3
4#[derive(Clone, Copy, Debug)]
5pub struct StringToUnicodeSequenceConverter {
6 char_to_unicode_symbol_converter: CharToUnicodeSymbolConverter,
7 balanced_variant_converter: BalancedVariantConverter,
8 unicode_sequence_type: u32,
9}
10
11impl StringToUnicodeSequenceConverter {
12 pub fn new(
13 char_to_unicode_symbol_converter: CharToUnicodeSymbolConverter,
14 balanced_variant_converter: BalancedVariantConverter,
15 unicode_sequence_type: u32,
16 ) -> Self {
17 Self {
18 char_to_unicode_symbol_converter,
19 balanced_variant_converter,
20 unicode_sequence_type,
21 }
22 }
23
24 pub fn convert(&self, links: &mut LinkStorage, content: &str) -> u32 {
25 let symbols = content
26 .encode_utf16()
27 .map(|code_unit| {
28 self.char_to_unicode_symbol_converter
29 .convert(links, code_unit)
30 })
31 .collect::<Vec<_>>();
32
33 if symbols.is_empty() {
34 return self.unicode_sequence_type;
35 }
36
37 let sequence = self.balanced_variant_converter.convert(links, &symbols);
38 links.get_or_create(sequence, self.unicode_sequence_type)
39 }
40}