1use bronzedb_client::Connection;
2use bronzedb_util::status::{Error, Result, StatusCode};
3use std::io::{self, Write};
4use std::net::TcpStream;
5
6fn main() -> Result<()> {
7 let mut addr = String::new();
8 print!("Please enter address: ");
9 io::stdout().flush()?;
10 io::stdin().read_line(&mut addr)?;
11 let stream = TcpStream::connect(addr.trim_end())?;
12 let mut client = Connection::new(stream);
13 loop {
14 let mut buf = String::new();
15 io::stdin().read_line(&mut buf)?;
16 let action: Vec<&str> = buf.trim_end().split(' ').collect();
17 debug_assert!(action.len() > 0);
18 match action[0].to_lowercase().as_str() {
19 "set" => {
20 debug_assert!(action.len() == 3);
21 client.set(
22 action[1].as_bytes().to_vec().into(),
23 action[2].as_bytes().to_vec(),
24 )?;
25 println!("OK")
26 }
27
28 "get" => {
29 debug_assert!(action.len() == 2);
30 let value = client.get(action[1].as_bytes().to_vec().into())?;
31 match value {
32 Some(data) => println!("{}", String::from_utf8(data).unwrap()),
33 None => println!("<None>"),
34 }
35 }
36
37 "delete" => {
38 debug_assert!(action.len() == 2);
39 client.delete(action[1].as_bytes().to_vec().into())?;
40 println!("OK")
41 }
42
43 "scan" => {
44 let mut lower_key = String::new();
45 let mut upper_key = String::new();
46 print!("lower_bound(default <None>): ");
47 io::stdout().flush()?;
48 io::stdin().read_line(&mut lower_key)?;
49 let lower_bound = match lower_key.trim_end() {
50 "" => None,
51 key => Some(key.as_bytes().to_vec().into()),
52 };
53
54 print!("upper_bound(default <None>): ");
55 io::stdout().flush()?;
56 io::stdin().read_line(&mut upper_key)?;
57 let upper_bound = match upper_key.trim_end() {
58 "" => None,
59 key => Some(key.as_bytes().to_vec().into()),
60 };
61 let scanner = client.scan(lower_bound, upper_bound)?;
62 let mut counter = 0;
63 for item in scanner {
64 let (key, value) = item?;
65 println!(
66 "{}: {}",
67 String::from_utf8(key.to_vec()).unwrap(),
68 String::from_utf8(value).unwrap()
69 );
70 counter += 1;
71 }
72 println!("{} items:", counter);
73 }
74 _ => {
75 break Err(Error::new(
76 StatusCode::UnknownAction,
77 format!("unknown action: {}", action[0]),
78 ));
79 }
80 }
81 }
82}