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
//! # Terminal CLI
//! 
//! Need to build an interactive command prompt, with commands, properties and with full autocomplete? This is for you.
//!
//! [![Build Status](https://travis-ci.org/hashmismatch/terminal_cli.rs.svg?branch=master)](https://travis-ci.org/hashmismatch/terminal_cli.rs)
//! 
//! [![Documentation](https://docs.rs/terminal_cli/badge.svg)](https://docs.rs/terminal_cli)
//! 
//!
//! # Example, output only (Rust's ```stdout```)
//!
//! ```
//! # use terminal_cli::*;
//! # use std::io;
//! # use std::io::Write;
//!
//! // Simple ranged integer property
//! let mut num1 = 1;
//! 
//! // Rust stdout terminal
//! let mut terminal = StdoutTerminal;
//!	
//! let options = PromptBufferOptions { echo: true, ..Default::default() };
//! let mut prompt = PromptBuffer::new(options);
//!
//! let input_keys = [Key::Character('h' as u8), Key::Character('e' as u8), Key::Character('l' as u8),
//!                   Key::Character('p' as u8), Key::Newline];
//! 
//! for key in &input_keys {
//!     let p = prompt.handle_key(*key, &mut terminal, |mut m| {
//!         if let Some(mut ctx) = m.command("help") {
//!             ctx.get_terminal().print_line("Help!");
//!         }
//!
//!         // Provides "num1/get" and "num1/set", with input validation
//!         if let Some(mut ctx) = m.property("num1", validate_property_min_max(1, 100)) {
//!             ctx.apply(&mut num1);
//!         }
//!     });
//! 
//!     if let PromptEvent::Break = p {
//!         break;
//!     }
//! }
//! ```

#![cfg_attr(not(feature = "std"), no_std)]

#![cfg_attr(not(feature="std"), feature(alloc))]

#[cfg(not(feature="std"))]
#[macro_use]
extern crate alloc;

mod autocomplete;
mod property;
mod utils;
mod prelude;
mod cli;
mod cli_command;
mod cli_property;
mod keys;
mod keys_terminal;
mod terminal;
mod prompt_buffer;


pub mod i18n;

pub use autocomplete::*;
pub use utils::*;
pub use cli::*;
pub use cli_command::*;
pub use cli_property::*;
pub use keys::*;
pub use keys_terminal::*;
pub use property::*;
pub use terminal::*;
pub use prompt_buffer::*;

#[cfg(test)]
mod tests;