1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
// Copyright 2019 Masahiko Hamazawa // // Licensed under the MIT license <LICENSE or // http://opensource.org/licenses/MIT>. // This file may not be copied, modified, on distributed except // according to those terms. //! onigiri::Onigiri is Factory. It can select either `Vvc` or `Btmvc` //! and generate it. //! //! `Vvc` is `Vec<Vec<char>>`. //! //! `Btmvc` is `BTreeMap<usize, Vec<char>>`. //! //! onigiri::utils is the utilities of handling `chars`. //! //! onigiri::validator is validate whether `Vec<char>` is valid. //! //! Some examples are as follows. //! //! //! use onigiri::Onigiri; //! use onigiri::utils::cast; //! use onigiri::validator; //! //! let test_text = "(13 + 2)".to_string(); //! let oni = Onigiri::new(&test_text); //! let vvc = oni.create_vvc(' '); //! //! assert_eq!( //! &vvc.attr, //! &vec![vec!['(', '1','3'],vec!['+'],vec!['2', ')']] //! ); //! //! let thirteen = &vvc.attr[0][1..].to_vec(); //! assert_eq!(validator::is_positive_integer(&thirteen), true); //! //! let num = cast::<u8>(&thirteen); //! assert_eq!(&num, &Some(13_u8)); //! assert_eq!(&num.unwrap() + 2, 15_u8); //! pub mod vvc; pub mod btmvc; pub mod utils; pub mod validator; use crate::vvc::Vvc; use crate::btmvc::Btmvc; #[derive(Debug)] pub struct Onigiri { pub attr: String } impl Onigiri { pub fn new<'a>(attr: &'a str) -> Self { Onigiri { attr: attr.to_string() } } /// This function create `Vvc`. /// /// use onigiri::Onigiri; /// use onigiri::vvc::Vvc; /// /// let test_text = "-123 456".to_string(); /// let oni = Onigiri::new(&test_text); /// let vvc = oni.create_vvc(' '); /// /// assert_eq!( /// vvc, /// Vvc { /// attr: vec![ /// vec!['-', '1', '2', '3'], /// vec!['4', '5', '6'] /// ] /// } /// ); /// pub fn create_vvc(&self, sep: char) -> Vvc { Vvc::new(&self.attr, sep) } /// This function create `Btmvc`. /// /// use onigiri::Onigiri; /// /// let test_text = "-123 456".to_string(); /// let oni = Onigiri::new(&test_text); /// let btmvc = oni.create_btmvc(' '); /// /// assert_eq!( /// btmvc.attr.get(&0), /// Some(&vec!['-', '1', '2', '3']) /// ); /// /// assert_eq!( /// btmvc.attr.get(&1), /// Some(&vec!['4', '5', '6']) /// ); /// pub fn create_btmvc(&self, sep: char) -> Btmvc { Btmvc::new(&self.attr, sep) } }