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
/* Copyright © 2019-2021 Randy Barlow This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>.*/ //! # rpick //! //! ```rpick``` helps pick items from a list of choices, using various algorithms. //! //! # Example //! //! ``` //! use std::collections::BTreeMap; //! //! use rand::SeedableRng; //! //! /// You need to define an interface. rpick will use this interface to interact with you during //! /// picks. //! struct Interface {}; //! //! impl rpick::ui::Ui for Interface { //! fn call_display_table(&self) -> bool { false } //! //! fn display_table(&self, table: &rpick::ui::Table) {} //! //! fn info(&self, message: &str) { println!("{}", message); } //! //! fn prompt_choice(&self, choice: &str) -> bool { //! println!("{}", choice); //! true //! } //! } //! //! let ui = Interface{}; //! let mut engine = rpick::engine::Engine::new(&ui); //! // For the sake of this example, let's override the PRNG with a seeded PRNG so the assertion //! // works as expected at the end. You most likely do not want to do this in practice as it takes //! // the randomness out of the system. //! engine.set_rng(rand::rngs::SmallRng::seed_from_u64(37)); //! let choices = vec![String::from("this"), String::from("that"), //! String::from("the other")]; //! let category = rpick::config::ConfigCategory::Even{choices: choices}; //! let mut config = BTreeMap::new(); //! config.insert("things".to_string(), category); //! //! let choice = engine.pick(&mut config, "things".to_string()).expect("unexpected"); //! //! // 32-bit architectures have different PRNG results than 64-bit architectures, so we will //! // only run this assertion on 64-bit systems. //! #[cfg(target_pointer_width = "64")] //! assert_eq!(choice, "that"); //! ``` pub mod config; pub mod engine; pub mod ui;