vi 0.8.0

An input method library for vietnamese IME
Documentation
use serde::Serialize;
use std::fmt::Write;

#[derive(Serialize)]
#[allow(dead_code)]
pub(crate) struct Metadata<'a> {
    pub(crate) input_file: &'a str,
}

#[macro_export]
macro_rules! gen_test {
    ($test_method:ident, $name:tt, $path: tt) => {
        #[test]
        fn $name() {
            let contents = include_str!($path);
            let mut settings = insta::Settings::clone_current();
            settings.set_snapshot_path("../testdata/output/");
            settings.set_info(&$crate::shared::Metadata { input_file: $path });
            settings.bind(|| {
                insta::assert_snapshot!($test_method(contents));
            });
        }
    };
}

pub fn transform_lines<F>(input: &str, transformer: F) -> String
where
    F: Fn(&'_ str) -> String,
{
    let mut result = String::new();
    for line in input.lines() {
        let words = line.split_whitespace();

        let mut transformed_line = String::new();
        for word in words {
            let transformed_words = transformer(word);
            write!(&mut transformed_line, "{} ", transformed_words).unwrap();
        }
        writeln!(&mut result, "{}", transformed_line.trim()).unwrap();
    }
    result
}