basic_tree 0.2.5

basic tree for rust, for now including only trie
Documentation
use super::basic::{Leaf, Node, Trie};
use std::cell::RefCell;
use std::cmp::Eq;
use std::hash::Hash;
use std::rc::Rc;


/// Adds one to the number given.
///
/// # Examples
///
/// ```
/// let word_trie = WordTrie::new();
/// let seq = "你在干什么";
/// let seq1 = "你在找什么";
/// word_trie.insert_words(seq, "没干嘛");
/// word_trie.insert_words(seq1, "是吗");
/// println!("{:?}", word_trie);
/// assert!(true);
/// ```


#[derive(Debug)]
pub struct WordTrie {
    inner: Rc<RefCell<Node<String>>>,
}

impl WordTrie {
    fn new() -> WordTrie {
        WordTrie { inner: Node::new() }
    }
    /// insert words to wordtrie
    fn insert_words(&self, words: &str, target: &str) {
        let m_words = WordTrie::split_words(words);
        self.insert(&m_words, target.to_string())
    }

    /// split words 
    fn split_words(words: &str) -> Vec<String> {
        let res: Vec<String> = words.chars().map(|word| word.to_string()).collect();
        res
    }

    fn insert(&self, words: &[String], target: String) {
        let mut leaf = Leaf::<String>::Nil;
        if target != "".to_string() {
            leaf = Leaf::<String>::End(target);
        }
        Node::insert_seq(self.inner.clone(), words, leaf);
    }
    /// split get words leaf
    fn get_leaf(&self, words: &[String]) -> Leaf<String> {
        Node::get_leaf(self.inner.clone(), words)
    }
}

#[test]
fn test_word() {
    let word_trie = WordTrie::new();
    let seq = "你在干什么";
    let seq1 = "你在找什么";
    word_trie.insert_words(seq, "没干嘛");
    word_trie.insert_words(seq1, "是吗");
    println!("{:?}", word_trie);
    assert!(true);
}