link-cli 0.2.0

A CLI tool for links manipulation
Documentation
use crate::link_storage::LinkStorage;
use crate::sequences::{BalancedVariantConverter, CharToUnicodeSymbolConverter};

#[derive(Clone, Copy, Debug)]
pub struct StringToUnicodeSequenceConverter {
    char_to_unicode_symbol_converter: CharToUnicodeSymbolConverter,
    balanced_variant_converter: BalancedVariantConverter,
    unicode_sequence_type: u32,
}

impl StringToUnicodeSequenceConverter {
    pub fn new(
        char_to_unicode_symbol_converter: CharToUnicodeSymbolConverter,
        balanced_variant_converter: BalancedVariantConverter,
        unicode_sequence_type: u32,
    ) -> Self {
        Self {
            char_to_unicode_symbol_converter,
            balanced_variant_converter,
            unicode_sequence_type,
        }
    }

    pub fn convert(&self, links: &mut LinkStorage, content: &str) -> u32 {
        let symbols = content
            .encode_utf16()
            .map(|code_unit| {
                self.char_to_unicode_symbol_converter
                    .convert(links, code_unit)
            })
            .collect::<Vec<_>>();

        if symbols.is_empty() {
            return self.unicode_sequence_type;
        }

        let sequence = self.balanced_variant_converter.convert(links, &symbols);
        links.get_or_create(sequence, self.unicode_sequence_type)
    }
}